Cùng với câu trả lời khác mà đề cập đến ưu tiên của not
thấp hơn in
, thực sự tuyên bố của bạn là tương đương với:
not (True in [False, True])
Nhưng lưu ý rằng nếu bạn không tách rời tình trạng của bạn từ những người khác, trăn sẽ sử dụng 2 vai trò (precedence
hoặc chaining
) để tách biệt, và trong trường hợp này python được ưu tiên sử dụng. Ngoài ra, lưu ý rằng nếu bạn muốn tách riêng một điều kiện bạn cần phải đặt tất cả các điều kiện trong ngoặc đơn không chỉ là đối tượng hoặc giá trị:
(not True) in [False, True]
Nhưng như đã đề cập, có một sửa đổi bởi python trên các nhà khai thác mà được chaining:
Dựa trên python documentation:
Lưu ý rằng so sánh, kiểm tra thành viên, và kiểm tra danh tính, một sẽ có cùng quyền ưu tiên và có một tính năng chaining từ trái sang phải như được mô tả trong phần So sánh.
Ví dụ kết quả của sau tuyên bố là False
:
>>> True == False in [False, True]
False
Bởi vì trăn chí chuỗi những điều khoản như sau:
(True == False) and (False in [False, True])
Mà chính xác là False and True
đó là False
.
Bạn có thể giả định rằng đối tượng trung tâm sẽ được chia sẻ giữa 2 thao tác và các đối tượng khác (Sai trong trường hợp này).
Và lưu ý rằng nó cũng đúng đối với tất cả các so sánh, trong đó có các bài kiểm tra thành viên và các hoạt động kiểm tra danh tính mà là toán hạng sau:
in, not in, is, is not, <, <=, >, >=, !=, ==
Ví dụ:
>>> 1 in [1,2] == True
False
Một ví dụ nổi tiếng là dãy số:
7<x<20
bằng:
7<x and x<20
http://stackoverflow.com/questions/31354429/why-is-true-is-false-false-false-in-python/31354514#31354514 – Kasramvd