Hướng dẫn lowest precedence operator in python - toán tử ưu tiên thấp nhất trong python

Các toán tử số học được ưu tiên hơn các toán tử logic. Python sẽ luôn đánh giá các toán tử số học trước tiên (** cao nhất, sau đó nhân/chia, sau đó bổ sung/trừ). Tiếp đến là các nhà khai thác quan hệ. Cuối cùng, các toán tử logic được thực hiện cuối cùng. Điều này có nghĩa là biểu thức

# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
2 sẽ được đánh giá để trước tiên thực hiện số học và sau đó kiểm tra các mối quan hệ.
# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
3 sẽ được thực hiện cuối cùng. Nhiều lập trình viên có thể đặt dấu ngoặc đơn xung quanh hai biểu thức quan hệ,
# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
4. Không cần thiết phải làm như vậy, nhưng không gây hại và có thể giúp mọi người dễ đọc và hiểu mã hơn.

Bảng sau đây tóm tắt các toán tử ưu tiên từ cao nhất đến thấp nhất. Một bảng hoàn chỉnh cho toàn bộ ngôn ngữ có thể được tìm thấy trong tài liệu Python.

Mức độ

Loại

Người vận hành

7(high)

số mũ

**

6

phép nhân

*,/, //,%

5

phép cộng

+,-

4

quan hệ

==,! =, =,>,

3

hợp lý

không phải

2

hợp lý

không phải

1(low)

hợp lý

không phải

hoặc

Ghi chú

Không gian làm việc này được cung cấp cho sự thuận tiện của bạn. Bạn có thể sử dụng cửa sổ ActiveCode này để thử bất cứ thứ gì bạn thích.

Lỗi phổ biến!

Học sinh thường kết hợp không chính xác các nhà khai thác trong và hoặc người vận hành. Ví dụ: nếu họ muốn kiểm tra xem chữ X có nằm trong một trong hai biến thì họ có xu hướng viết nó theo cách sau không:

# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
5

    Được viết theo cách này, mã không phải lúc nào cũng làm những gì mà lập trình viên dự định. Điều này là do toán tử

    # Multiplication has higher precedence
    # than subtraction
    >>> 10 - 4 * 2
    2
    6 chỉ ở phía bên trái của câu lệnh OR. Nó không được thực hiện ở cả hai phía của tuyên bố. Để kiểm tra đúng X rằng X bên trong một trong hai biến, toán tử trong phải được sử dụng ở cả hai phía trông như thế này:

  • Kiểm tra việc hiểu của bạn
  • Điều nào sau đây thể hiện đúng sự ưu tiên của toán tử (sử dụng dấu ngoặc đơn) trong biểu thức sau: 5*3> 10 và 4+6 == 11
  • ((5*3)> 10) và ((4+6) == 11)
  • Có, * và + có quyền ưu tiên cao hơn, theo sau là> và ==, và sau đó là từ khóa "và"
  • (5*(3> 10)) và (4 + (6 == 11))
  • Toán tử số học (*, +) có ưu tiên cao hơn các toán tử so sánh (>, ==)
  • ((((5*3)> 10) và 4) +6) == 11
  • Nhóm này giả định Python chỉ đơn giản là đánh giá từ trái sang phải, điều này không chính xác. Nó tuân theo mức độ ưu tiên được liệt kê trong bảng trong phần này.

((5*3)> (10 và (4+6))) == 11

Nhóm này giả định rằng "và" có quyền ưu tiên cao hơn ==, điều này không đúng.

Đây là một hình ảnh động cho biểu thức trên: of activities on this page

Ư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
7 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

# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
8 vì nó có ưu tiên cao hơn phép 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).

Người vận hànhNghĩa
# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
8
Dấu ngoặc đơn
# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
0
Số mũ
# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
1,
# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
2,
# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
3
Unary Plus, Unary Minus, bitwise không
# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
4,
# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
5,
# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
6,
# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
7
Phép nhân, phân chia, phân chia sàn, mô đun
# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
8,
# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
9
Ngoài ra, trừ
# 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")
0,
# 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")
1
Các nhà khai thác thay đổi bitwise
# 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")
2
Bitwise và
# 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")
3
BitWise XOR
# 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")
4
Bitwise hoặc
# 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")
5,
# 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")
6,
# 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")
7,
# 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")
8,
# 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")
9,
Lunch being delivered
0,
Lunch being delivered
1,
Lunch being delivered
2,
Lunch being delivered
3,
Lunch being delivered
4
So sánh, danh tính, nhà khai thác thành viên
Lunch being delivered
5
Logic không
Lunch being delivered
6
Hợp lý và
Lunch being delivered
7
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

Lunch being delivered
8 chạy
Lunch being delivered
9 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

Lunch being delivered
9 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
Lunch being delivered
6 cao hơn
Lunch being delivered
7.

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

# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
8 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

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.

Ví dụ, phép nhân và phân chia sàn có cùng ưu tiên. Do đó, nếu cả hai đều có mặt trong một biểu thức, cái bên trái được đánh giá trước.

# Left-right associativity
# Output: 3
print(5 * 2 // 3)

# Shows left-right associativity
# Output: 0
print(5 * (2 // 3))

Đầu ra

3
0

Lưu ý: Toán tử số mũ

# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
0 có tính kết hợp từ phải sang trái trong Python.: Exponent operator
# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
0 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ể thấy rằng

# 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")
5 tương đương với
# 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")
6.


Các nhà khai thác không liên kết

Một số nhà khai thác như toán tử chuyển nhượng 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ể được thể hiện là sự kết hợp.

Ví dụ,

# 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")
7 không có nghĩa là
# 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")
8 cũng như
# 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")
9.
# 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")
7 tương đương với
Can't deliver lunch
1 và được đánh giá từ từ trái sang phải.

Hơn nữa, trong khi chuỗi các bài tập như

Can't deliver lunch
2 hoàn toàn hợp lệ,
Can't deliver lunch
3 sẽ dẫn đến lỗ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

Nhà điều hành nào có quyền ưu tiên thấp nhất?

Ưu tiên thấp nhất Các toán tử logic hợp chất, &&, ||, -A và -o có quyền ưu tiên thấp. Thứ tự đánh giá các toán tử có hiệu suất bình đẳng thường là từ trái sang phải.&&, ||, -a, and -o have low precedence. The order of evaluation of equal-precedence operators is usually left-to-right.

Thứ tự chính xác của toán tử được ưu tiên trong Python là gì?

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.Ví dụ, phép nhân và phân chia sàn có cùng ưu tiên.Do đó, nếu cả hai đều có mặt trong một biểu thức, cái bên trái được đánh giá trước.Lưu ý: Toán tử số mũ ** có tính kết hợp từ phải sang trái trong Python.left-to-right associativity. For example, multiplication and floor division have the same precedence. Hence, if both of them are present in an expression, the left one is evaluated first. Note: Exponent operator ** has right-to-left associativity in Python.

Nhà điều hành nào có ưu tiên cao nhất trong Python?

Dấu ngoặc đơn có mức độ ưu tiên cao nhất và có thể được sử dụng để buộc một biểu thức để đánh giá theo thứ tự bạn muốn. have the highest precedence and can be used to force an expression to evaluate in the order you want.

Ưu tiên của các toán tử số học từ cao nhất đến thấp nhất trong Python là gì?

Python sẽ luôn đánh giá các toán tử số học trước tiên (** cao nhất, sau đó nhân/chia, sau đó bổ sung/trừ).Tiếp đến là các nhà khai thác quan hệ.Cuối cùng, các toán tử logic được thực hiện cuối cùng.first (** is highest, then multiplication/division, then addition/subtraction). Next comes the relational operators. Finally, the logical operators are done last.