Operator precedence - not True == False
Hiện tượng lạ
Phần tiêu đề “Hiện tượng lạ”print(not True == False) # False ❌print(not (True == False)) # True
# Tương tựprint(not 1 == 2) # Falseprint(not (1 == 2)) # TrueWhat the Python?! not True == False không phải True sao?! 🤔
Giải thích
Phần tiêu đề “Giải thích”Operator precedence
Phần tiêu đề “Operator precedence”# Python evaluate:not True == False# = not (True == False) # == có precedence cao hơn not# = not False# = True
# KHÔNG phải:# = (not True) == False# = False == False# = TrueBảng precedence (cao → thấp)
Phần tiêu đề “Bảng precedence (cao → thấp)”1. () # Parentheses2. ** # Exponentiation3. +x, -x, ~x # Unary plus, minus, NOT4. *, /, //, % # Multiplication, Division5. +, - # Addition, Subtraction6. <<, >> # Shifts7. & # Bitwise AND8. ^ # Bitwise XOR9. | # Bitwise OR10. ==, !=, <, >, <=, >=, is, in # Comparisons11. not # Boolean NOT12. and # Boolean AND13. or # Boolean ORVí dụ phổ biến
Phần tiêu đề “Ví dụ phổ biến”not và ==
Phần tiêu đề “not và ==”# not có precedence THẤP hơn ==not x == y # = not (x == y)
# Dùng ()(not x) == y # Rõ ràng hơnand và or
Phần tiêu đề “and và or”# and có precedence cao hơn ora or b and c # = a or (b and c)
# Không phải(a or b) and cArithmetic và comparison
Phần tiêu đề “Arithmetic và comparison”# Arithmetic trước comparison2 + 3 == 5 # = (2 + 3) == 5 = True
1 < 2 + 3 # = 1 < (2 + 3) = TrueBest Practice
Phần tiêu đề “Best Practice”✅ Luôn dùng ()
Phần tiêu đề “✅ Luôn dùng ()”# ✅ Rõ ràngif (not value) == expected: pass
# ❌ Confusingif not value == expected: passTóm tắt
Phần tiêu đề “Tóm tắt”Operator precedence:
- Comparison (
==) >notand>or- ✅ Luôn dùng
()để rõ ràng
Nhớ: Khi nghi ngờ, dùng ()!