Tại sao (1 == 2 != 3)
đánh giá thành False
bằng Python, trong khi cả hai ((1 == 2) != 3)
và (1 == (2 != 3))
đánh giá là True
?Tại sao (1 == 2! = 3) đánh giá sai bằng Python?
Ưu tiên toán tử nào được sử dụng ở đây?
Tại sao (1 == 2 != 3)
đánh giá thành False
bằng Python, trong khi cả hai ((1 == 2) != 3)
và (1 == (2 != 3))
đánh giá là True
?Tại sao (1 == 2! = 3) đánh giá sai bằng Python?
Ưu tiên toán tử nào được sử dụng ở đây?
Điều này là do các nhà khai thác chaining phenomenon
. Các pydoc giải thích nó như:
So sánh có thể được xích tùy tiện, ví dụ, x < y < = z tương đương để x < y và y < = z, ngoại trừ việc y được đánh giá chỉ một lần (nhưng trong cả hai trường hợp thì z không được đánh giá gì cả khi x < y bị phát hiện là sai).
Và nếu bạn nhìn vào precedence của ==
và !=
nhà khai thác, bạn sẽ nhận thấy rằng họ có cùng ưu tiên và do đó áp dụng đối với các hiện tượng chaining.
Vì vậy, về cơ bản những gì sẽ xảy ra:
>>> 1==2
=> False
>>> 2!=3
=> True
>>> (1==2) and (2!=3)
# False and True
=> False
Một xích biểu hiện như A op B op C
nơi op
được toán tử so sánh được trái ngược với C đánh giá là (https://docs.python.org/2.3/ref/comparisons.html):
A op B and B op C
Vì vậy, ví dụ bạn được đánh giá như
1 == 2 and 2 != 3
kết quả là False
.