Khi tôi đang xem câu trả lời cho câu hỏi này , tôi thấy tôi không hiểu câu trả lời của chính mình.
Tôi thực sự không hiểu làm thế nào điều này được phân tích cú pháp. Tại sao ví dụ thứ hai trả về Sai?
>>> 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 vì bất kì sự 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 điều này là khác biệt tinh tế với các bản sao được liên kết:
Tại sao biểu thức 0 <0 == 0 trả về Sai trong Python? .
Cả hai câu hỏi là để làm với sự hiểu biết của con người về biểu thức. Dường như có hai cách (theo suy nghĩ của tôi) để đánh giá biểu thức. Tất nhiên không phải là chính xác, nhưng trong ví dụ của tôi, việc 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à có ý nghĩa như một biểu thức:
>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True
Vì vậy, liên kết trả lời tại sao điều này đánh giá False
:
>>> 0 < 0 == 0
False
Nhưng với ví dụ của tôi 1 in ([1,0] == True)
không có ý nghĩa như một biểu thức, vì vậy thay vì có hai cách giải thích (thừa nhận sai), chỉ có một cách có thể xảy ra:
>>> (1 in [1,0]) == True
==
liên kết chặt chẽ hơnin
, do đó,[1,0] == True
được đánh giá đầu tiên, sau đó kết quả của nó được đưa vào1 in other_result
.