Ưu tiên của các nhà khai thác Python
Sự kết hợp của các giá trị, biến, toán tử và các cuộc gọi chức năng đượ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ó ư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 no___trans___pre___13 vì nó có ưu tiên cao hơn so với nhân.
# Parentheses [] has higher precedence
>>> [10 - 4] * 2
12
Các nhà điều hành được ưu tiên trong Python được liệt kê trong bảng sau. Đó là theo thứ tự giảm dần [nhóm trên có ưu tiên cao hơn so với nhóm thấp hơn].
3 | Dấu ngoặc đơn |
5 | Số mũ |
No___trans___pre___16, no___trans___pre___17, no___trans___pre___18 | Unary Plus, Unary Minus, bitwise không |
No___trans___pre___19, no___trans___pre___20, no___trans___pre___21, no___trans___pre___22 | Phép nhân, phân chia, phân chia sàn, mô đun |
3, no___trans___pre___24 | Ngoài ra, trừ |
5, no___trans___pre___26 | Các nhà khai thác thay đổi bitwise |
7 | Bitwise và |
8 | BitWise XOR |
9 | Bitwise hoặc |
No___trans___pre___30, no___trans___pre___31, no___trans___pre___32, no___trans___pre___33, no___trans___ | So sánh, danh tính, nhà khai thác thành viên |
Lunch being delivered0 | Logic không |
Lunch being delivered1 | Hợp lý và |
Lunch being delivered2 | Hợp lý hoặc |
Hãy xem xét một số ví dụ:
Giả sử chúng ta đang xây dựng một khối no___trans___pre___43 chạy số ___trans___pre___44 khi bữa trưa là trái cây hoặc bánh sandwich và chỉ khi tiền nhiều hơn hoặc bằng 2.
# Precedence of or & and
meal = "fruit"
money = 0
if meal == "fruit" or meal == "sandwich" and money >= 2:
print["Lunch being delivered"]
else:
print["Can't deliver lunch"]
Đầu ra
Lunch being delivered
Chương trình này chạy khối số ___trans___pre___44 ngay cả khi tiền là 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 NO___TRANS___PRE___41 cao hơn NO___Trans___Pre___42.
Chúng ta có thể nhận được đầu ra mong muốn bằng cách sử dụng dấu ngoặc đơn no___trans___pre___13 theo cách sau:
# Precedence of or & and
meal = "fruit"
money = 0
if [meal == "fruit" or meal == "sandwich"] and money >= 2:
print["Lunch being delivered"]
else:
print["Can't deliver lunch"]
Đầu ra
Can't deliver lunch
Chương trình này chạy khối số ___trans___pre___44 ngay cả khi tiền là 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 NO___TRANS___PRE___41 cao hơn NO___Trans___Pre___42.
Chúng ta có thể nhận được đầu ra mong muốn bằng cách sử dụng dấu ngoặc đơn no___trans___pre___13 theo cách sau:
Sự kết hợp của các nhà khai thác Python
Chúng ta có thể thấy trong bảng trên rằng nhiều hơn một toán tử tồn tại trong cùng một nhóm. Các nhà khai thác này có cùng mức độ ưu tiên.
Khi hai toán tử có cùng mức độ ưu tiên, sự kết hợp giúp xác định thứ tự hoạt động.
# Left-right associativity
# Output: 3
print[5 * 2 // 3]
# Shows left-right associativity
# Output: 0
print[5 * [2 // 3]]
Đầu ra
3 0
Chương trình này chạy khối số ___trans___pre___44 ngay cả khi tiền là 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 NO___TRANS___PRE___41 cao hơn NO___Trans___Pre___42.: Exponent operator
# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
5 has right-to-left associativity in Python.# Shows the right-left associativity of **
# Output: 512, Since 2**[3**2] = 2**9
print[2 ** 3 ** 2]
# If 2 needs to be exponated fisrt, need to use []
# Output: 64
print[[2 ** 3] ** 2]
Chúng ta có thể nhận được đầu ra mong muốn bằng cách sử dụng dấu ngoặc đơn no___trans___pre___13 theo cách sau:
Sự kết hợp của các nhà khai thác Python
Chúng ta có thể thấy trong bảng trên rằng nhiều hơn một toán tử tồn tại trong cùng một nhóm. Các nhà khai thác này có cùng mức độ ưu tiên.
Khi hai toán tử có cùng mức độ ưu tiên, sự kết hợp giúp xác định thứ tự hoạt động.
Sự kết hợp là thứ tự trong đó 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 nhà khai thác đều có sự kết hợp từ trái sang phải.
# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
0Đầu ra
# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
1