Bên cạnh các câu trả lời khác có mức độ ưu tiên not
thấp hơn in
, thực tế, tuyên bố của bạn tương đương với:
not (True in [False, True])
Nhưng lưu ý rằng nếu bạn không tách biệt điều kiện của mình với các điều kiện khác, python sẽ sử dụng 2 vai trò ( precedence
hoặc chaining
) để phân tách điều đó và trong trường hợp này, python được sử dụng ưu tiên. Ngoài ra, lưu ý rằng nếu bạn muốn tách một điều kiện, bạn cần đặ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 khác của python trên các toán tử đang xâu chuỗi :
Dựa trên con trăn tài liệu:
Lưu ý rằng so sánh, kiểm tra thành viên và kiểm tra danh tính, tất cả đều có cùng mức độ ưu tiên và có tính năng xâu chuỗi từ trái sang phải như được mô tả trong phần So sánh.
Ví dụ: kết quả của tuyên bố sau là False
:
>>> True == False in [False, True]
False
Bởi vì python sẽ xâu chuỗi các câu lệnh 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 điều này cũng đúng với tất cả các So sánh, bao gồm các bài kiểm tra thành viên và các hoạt động kiểm tra danh tính theo các toán hạng sau:
in, not in, is, is not, <, <=, >, >=, !=, ==
Thí dụ :
>>> 1 in [1,2] == True
False
Một ví dụ nổi tiếng khác là dãy số:
7<x<20
tương đương với:
7<x and x<20