Khi tôi đang xem câu trả lời cho this question, tôi thấy mình không hiểu câu trả lời của riêng mình.Tại sao (1 trong [1.0] == True) đánh giá sai?
Tôi thực sự không hiểu cách phân tích cú pháp này. Tại sao ví dụ thứ hai trả về False?
>>> 1 in [1,0] # This is expected
True
>>> 1 in [1,0] == True # This is strange
False
>>> (1 in [1,0]) == True # This is what I wanted it to be
True
>>> 1 in ([1,0] == True) # But it's not just a precedence issue!
# It did not raise an exception on the second example.
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
1 in ([1,0] == True)
TypeError: argument of type 'bool' is not iterable
Cảm ơn bạn đã được trợ giúp. Tôi nghĩ rằng tôi phải thiếu một cái gì đó thực sự rõ ràng.
Tôi nghĩ rằng đây là một cách tinh tế khác nhau cho bản sao đã được liên kết:
Why does the expression 0 < 0 == 0 return False in Python?.
Cả hai câu hỏi đều liên quan đến hiểu biết của con người về biểu thức. Dường như có hai cách để suy nghĩ về biểu hiện. Tất nhiên là không chính xác, nhưng trong ví dụ của tôi, giải thích cuối cùng là không thể.
Nhìn vào 0 < 0 == 0
bạn có thể tưởng tượng mỗi nửa được đánh giá và làm cho ý nghĩa như là một biểu:
>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True
Vì vậy, các liên kết câu trả lời tại sao điều này đánh giá False
:
>>> 0 < 0 == 0
False
Nhưng với ví dụ 1 in ([1,0] == True)
doesn của tôi không có ý nghĩa như một biểu thức, do đó, thay vì có hai (thừa nhận sai) có thể giải thích, chỉ có một cách có thể:
>>> (1 in [1,0]) == True
Ưu tiên toán tử ... '==' liên kết chặt chẽ hơn 'in', vì vậy' [1.0] == True' được đánh giá trước, sau đó kết quả của việc đó được đưa vào '1 trong other_result'. –
Tôi đã xóa thẻ Python-2.7, vì Python 3.2 hoạt động theo cùng một cách. – lvc
@Marc B: Không giải thích biểu thức thứ hai –