Python cung cấp các toán tử logic để thực hiện các phép toán logic (Boolean).(and
,or
,not
)
Nó được sử dụng để mô tả mối quan hệ giữa nhiều điều kiện trong một câu lệnh if.
Phần này mô tả những điều sau đây.
- ngã tư:
and
- bổ sung hợp lý:
or
- từ chối:
not
and
,or
,not
Ưu tiên điều hành
Ngoài ra, những điểm sau đây được giải thích là những cảnh báo.
- Toán tử logic cho các đối tượng kiểu khác với bool
and
,or
Các giá trị trả về này không nhất thiết phải thuộc kiểu bool.- Ngắn mạch (đánh giá ngắn mạch)
ngã tư:and
và trả về tích lôgic của hai giá trị.
print(True and True)
# True
print(True and False)
# False
print(False and True)
# False
print(False and False)
# False
Trong thực tế, nó thường được sử dụng không phải cho true hoặc false, mà cho các biểu thức điều kiện sử dụng toán tử so sánh. Đối với thông tin của bạn, các toán tử so sánh như sau.
<
>
a = 10
print(0 < a)
# True
print(a < 100)
# True
print(0 < a and a < 100)
# True
và có thể được nối như sau.
print(0 < a < 100)
# True
bổ sung hợp lý:or
hoặc trả về OR logic của hai giá trị.
print(True or True)
# True
print(True or False)
# True
print(False or True)
# True
print(False or False)
# False
từ chối:not
not “trả về phủ định của giá trị; true và false được đảo ngược.
print(not True)
# False
print(not False)
# True
and,or,notƯu tiên điều hành
Thứ tự ưu tiên của các toán tử logic này như sau: not là cao nhất.
not
and
or
Trong đoạn mã mẫu sau, biểu thức trên được hiểu như thể nó là biểu thức bên dưới. Vì không có vấn đề gì với các dấu ngoặc đơn, có thể dễ dàng mô tả rõ ràng chúng hơn trong các trường hợp như ví dụ này.
print(True or True and False)
# True
print(True or (True and False))
# True
Nếu bạn muốn hoạt động hoặc trước và, hãy sử dụng dấu ngoặc đơn ().
print((True or True) and False)
# False
<
,>
Các toán tử so sánh này thậm chí có mức độ ưu tiên cao hơn không. Do đó, dấu ngoặc đơn không cần thiết cho mỗi phép toán so sánh, như trường hợp trong ví dụ trên.
print(0 < a and a < 100)
# True
Xem tài liệu chính thức bên dưới để biết tóm tắt về ưu tiên toán tử trong Python.
Toán tử logic cho các đối tượng kiểu khác với bool
With these logical operators, not only bool types (true, false), but also numbers, strings, lists, etc. are processed as boolean values.
Các đối tượng sau đây được coi là sai trong các phép toán logic của Python.
- Các hằng số được xác định là sai:
None
,false
- Số 0 trong các kiểu số:
0
,0
,0j
,Decimal(0)
,Fraction(0, 1)
- Chuỗi hoặc bộ sưu tập trống:
'
,()
,[]
,{}
,set()
,range(0)
Tất cả các giá trị khác được coi là đúng.
Hàm bool () có thể được sử dụng để lấy giá trị boolean của một đối tượng. Lưu ý rằng chuỗi ‘0’ hoặc ‘False’ được coi là đúng.
print(bool(10))
# True
print(bool(0))
# False
print(bool(''))
# False
print(bool('0'))
# True
print(bool('False'))
# True
print(bool([]))
# False
print(bool([False]))
# True
Để xử lý ‘0’ hoặc ‘false’ trong một chuỗi là false, hãy sử dụng distutils.util.strtobool ().
and,orCác giá trị trả về này không nhất thiết phải thuộc kiểu bool.
Đây là một ví dụ về một đối tượng không phải là kiểu bool, hiển thị kết quả của mỗi toán tử trên một giá trị số.
x = 10 # True
y = 0 # False
print(x and y)
# 0
print(x or y)
# 10
print(not x)
# False
Như bạn có thể thấy từ ví dụ trên, và và hoặc trong Python không trả về true hoặc false của kiểu bool, nhưng trả về giá trị ở bên trái hoặc bên phải tùy thuộc vào việc nó đúng hay sai. Ví dụ là số, nhưng điều tương tự cũng áp dụng cho các kiểu khác như chuỗi và danh sách. Ngẫu nhiên, không trả về true hoặc false của kiểu bool.
Các định nghĩa về giá trị trả về của và và hoặc như sau.
The expression x and y first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the resulting value is returned.
The expression x or y first evaluates x; if x is true, its value is returned; otherwise, y is evaluated and the resulting value is returned.
6.11. Boolean operations — Expressions — Python 3.10.1 Documentation
Khi các giá trị của biểu thức bên trái và bên phải là true và false riêng biệt, các giá trị trả về rất dễ hiểu. Mặt khác, nếu cả hai đều đúng hoặc cả hai đều sai, giá trị trả về sẽ khác nhau tùy thuộc vào đơn đặt hàng.
Nếu bạn sử dụng nó như một biểu thức điều kiện trong câu lệnh if, v.v., kết quả được đánh giá là một giá trị boolean và được xử lý, vì vậy bạn không cần phải lo lắng về điều đó, nhưng nếu bạn sử dụng giá trị trả về để xử lý thêm, bạn cần phải cẩn thận.
x = 10 # True
y = 100 # True
print(x and y)
# 100
print(y and x)
# 10
print(x or y)
# 10
print(y or x)
# 100
x = 0 # False
y = 0.0 # False
print(x and y)
# 0
print(y and x)
# 0.0
print(x or y)
# 0.0
print(y or x)
# 0
print(bool(x and y))
# False
Nếu bạn muốn coi nó là true hoặc false, bạn có thể làm như trong ví dụ cuối cùng.bool(x and y)
Các giá trị trả về của và và hoặc được tóm tắt trong bảng dưới đây.
x | y | x and y | x or y |
---|---|---|---|
true | false | y | x |
false | true | x | y |
true | true | y | x |
false | false | x | y |
Ngắn mạch (đánh giá ngắn mạch)
Như bạn có thể thấy từ bảng trên, nếu x sai trong x và y hoặc nếu x đúng trong x hoặc y, giá trị trả về sẽ là x bất kể giá trị của y.
Trong trường hợp này, y không được đánh giá.
and
,or
Lưu ý rằng nếu bạn gọi một hàm hoặc phương thức ở phía bên phải của các quy trình này để thực hiện một số xử lý, quy trình có thể không được thực thi tùy thuộc vào kết quả ở phía bên trái.
def test():
print('function is called')
return True
print(True and test())
# function is called
# True
print(False and test())
# False
print(True or test())
# True
print(False or test())
# function is called
# True