Sự kết hợp của các giá trị, biến, toán tử và lời gọi hàm được gọi là một biểu thức. Trình thông dịch Python có thể đánh giá một biểu thức hợp lệ
Ví dụ
>>> 5 - 7
-2
Đây
# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
2 là một biểu thức. Có thể có nhiều hơn một toán tử trong một biểu thứcĐể đánh giá các loại biểu thức này, có một quy tắc ưu tiên trong Python. Nó hướng dẫn thứ tự thực hiện các hoạt động này
Ví dụ: phép nhân có quyền ưu tiên cao hơn phép trừ
# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
Nhưng chúng ta có thể thay đổi thứ tự này bằng cách sử dụng dấu ngoặc đơn
# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
3 vì nó có độ ưu tiên cao hơn phép nhân# Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
Thứ tự ưu tiên của toán tử trong Python được liệt kê trong bảng sau. Nó theo thứ tự giảm dần [nhóm trên có quyền ưu tiên cao hơn nhóm dưới]
OperatorsMeaning
# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
3Parentheses# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
5Exponent# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
6, # Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
7, # Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
8Unary plus, Unary minus, Bitwise NOT# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
9, # Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
0, # Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
1, # Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
2Multiplication, Division, Floor division, Modulus# Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
3, # Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
4Addition, Subtraction# Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
5, # Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
6Bitwise shift operators# Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
7Bitwise AND# Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
8Bitwise XOR# Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
9Bitwise OR# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
10, # Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
11, # Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
12, # Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
13, # Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
14, # Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
15, # Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
16, # Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
17 Hãy xem xét một số ví dụ
Giả sử chúng ta đang xây dựng một khối
# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
13 chạy # Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
14 khi bữa trưa là trái cây hoặc bánh mì và chỉ khi tiền lớn hơn hoặc bằng 2# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
1đầu ra
# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
1Chương trình này chạy khối
# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
14 ngay cả khi tiền bằng 0. Nó không cung cấp cho chúng tôi đầu ra mong muốn vì mức độ ưu tiên của # Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
11 cao hơn # Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
12Chúng ta có thể nhận được đầu ra mong muốn bằng cách sử dụng dấu ngoặc đơn
# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
3 theo cách sau# Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
2đầu ra
# Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
3Tính liên kết của các toán tử Python
Chúng ta có thể thấy trong bảng trên có nhiều toán tử tồn tại trong cùng một nhóm. Các toán tử này có cùng mức ưu tiên
Khi hai toán tử có cùng mức độ ưu tiên, tính kết hợp giúp xác định thứ tự của các phép toán
Tính kết hợp là thứ tự mà một biểu thức được đánh giá có nhiều toán tử có cùng mức độ ưu tiên. Hầu như tất cả các toán tử đều có tính kết hợp từ trái sang phải
Ví dụ: phép nhân và phép chia sàn có cùng mức độ ưu tiên. Do đó, nếu cả hai đều có mặt trong một biểu thức, thì biểu thức bên trái được đánh giá trước
# Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
4đầu ra
# Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
5Ghi chú. Toán tử số mũ
# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
5 có tính kết hợp từ phải sang trái trong Python# Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
7Chúng ta có thể thấy rằng
# Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
20 tương đương với # Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
21Toán tử không kết hợp
Một số toán tử như toán tử gán và toán tử so sánh không có tính kết hợp trong Python. Có các quy tắc riêng cho các chuỗi của loại toán tử này và không thể biểu thị dưới dạng tính kết hợp
Ví dụ:
# Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
22 không có nghĩa là # Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
23 cũng không phải # Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
24. # Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
22 tương đương với # Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
26 và được đánh giá từ trái sang phảiHơn nữa, trong khi xâu chuỗi các phép gán như
# Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
27 là hoàn toàn hợp lệ, thì # Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
28 sẽ dẫn đến lỗi