Thứ tự ưu tiên trong Python từ cao nhất đến thấp nhất là gì?

Thứ tự ưu tiên của toán tử xác định thứ tự các thao tác được xử lý. Trong hướng dẫn này, bạn sẽ thực hiện một thủ thuật toán học bằng cách sử dụng dấu ngoặc đơn lồng nhau để kiểm soát mức độ ưu tiên của toán tử Python. Nếu bạn mới tham gia với chúng tôi, bạn có thể muốn bắt đầu với bài viết trước của chúng tôi, Toán tử Python là toán học

Ưu tiên toán tử Python

Bây giờ chúng ta quay lại câu chuyện đang tiếp diễn tại Bệnh viện Robot toàn cầu của Rossum. Egos bùng lên như Drs. Plus, Minus, Slash, Asterisk và Powers tranh luận ai là người có nhiều quyền nhất. Kháng cáo được gửi tới chủ tịch bệnh viện, ngoặc đơn. Giống như bất kỳ bệnh viện robot tốt nào, có một hệ thống phân cấp giữa các hoạt động

Xem điều gì sẽ xảy ra khi chúng ta chạy một biểu thức liên quan đến các toán tử hỗn hợp

>>> 1 + 2 * 3
7

Bạn có thể mong đợi nó bằng 9. Nhưng trình thông dịch Python không đọc hoặc xử lý toán tử từ trái sang phải như chúng ta. Thay vào đó, trình thông dịch Python xếp hạng các toán tử theo mức độ quan trọng và xử lý chúng theo một trình tự cụ thể. Đây được gọi là thứ tự của các hoạt động hoặc, tùy thuộc vào người bạn đang nói chuyện với, quyền ưu tiên của nhà điều hành. Trong ví dụ trên, phép nhân có mức độ ưu tiên cao hơn phép cộng, vì vậy 2 * 3 được xử lý trước, sau đó được cộng vào 1. Sử dụng dấu ngoặc đơn, chúng ta có thể buộc các toán tử có mức độ ưu tiên thấp hơn chạy trước

>>> [1 + 2] * 3
9

Hãy xem PEMDAS. Không, PEMDAS không phải là một dòng chữ trên biểu đồ mắt. Đó là một từ viết tắt để giúp bạn nhớ những toán tử nào đứng trước những toán tử khác. Chữ viết tắt là viết tắt của Dấu ngoặc đơn Phép nhân Phép chia Phép cộng Phép trừ. Bạn có thể ghi nhớ nó với “Xin thứ lỗi cho dì Susie thân mến của tôi”. Nhớ Susie chứ?

Biểu đồ sau phác thảo mức độ ưu tiên của toán tử

Chủ tịch ưu tiên cao nhất[] Dấu ngoặc đơn Dr. Lũy thừa**Lũy thừaDr. Dấu hoa thị*Nhân Dr. Slash/DivisionDr. Cộng+Thêm Ưu tiên thấp nhấtDr. Dấu trừ–Phép trừ

Trong phép ẩn dụ về bệnh viện rô-bốt của chúng ta, Chủ tịch Parentheses có quyền hạn cao nhất, tiếp theo là Tiến sĩ. Quyền hạn, Tiến sĩ. Dấu hoa thị, Tiến sĩ. Chém, tiến sĩ. Ngoài ra, và cuối cùng, Tiến sĩ. Dấu trừ. Như bạn có thể thấy, nó trả tiền để nghĩ lớn. Dấu ngoặc đơn xác định thứ tự các hoạt động. Bất kỳ thao tác nào chứa trong dấu ngoặc đơn đều được thực hiện trước. Nhưng nó trở nên tốt hơn. Bạn có thể sử dụng dấu ngoặc đơn để lồng các phép toán trong các phép toán, giống như búp bê Matryoshka làm bằng Trăn

Dấu ngoặc đơn là toán học

Hãy cùng xem lại trò ảo thuật của chúng ta, lần này sử dụng quy tắc ưu tiên với dấu ngoặc đơn lồng nhau VÀ phép thuật của Python. Để chứng minh rằng nó hoạt động với bất kỳ số nào, tôi sẽ sử dụng số nguyên không may mắn 13. Bạn có thể sử dụng bất kỳ số nguyên dương nào bạn muốn. Bắt đầu xây dựng câu lệnh của bạn trên lời nhắc Python của bạn, nhưng đừng nhấn quay lại cho đến khi tôi nói như vậy

Bước đầu tiên trong trò ảo thuật của chúng ta là cộng 5. Chúng tôi muốn điều đó xảy ra trước, vì vậy hãy đặt nó trong ngoặc đơn, như thế này

>>>[ 13 + 5 ]

Tiếp theo ta nhân kết quả đó với 2. Kết thúc câu lệnh đầu tiên của chúng ta trong một cặp dấu ngoặc đơn khác với *2 ẩn bên trong

>>>[ [ 13 + 5 ] * 2]

Bây giờ chúng ta cần trừ 4. Bọc nó trong một bộ dấu ngoặc đơn khác có chứa biểu thức '-4'

>>>[ [ [ 13 + 5 ] * 2 ] - 4 ]

Bộ dấu ngoặc đơn cuối cùng của chúng ta cần chia kết quả hiện tại cho 2

>>>[ [ [ [ 13 + 5 ] * 2 ] - 4 ] / 2]

Cuối cùng, chúng tôi trừ số ban đầu của chúng tôi. Không cần thiết phải đặt nó trong dấu ngoặc đơn vì đây sẽ là thao tác cuối cùng được thực hiện

Python có các quy tắc được xác định rõ để chỉ định thứ tự đánh giá các toán tử trong một biểu thức khi biểu thức có một số toán tử. Ví dụ, phép nhân và phép chia được ưu tiên hơn phép cộng và phép trừ. Quy tắc ưu tiên có thể được ghi đè bằng dấu ngoặc đơn rõ ràng


thứ tự ưu tiên

Khi hai toán tử dùng chung một toán hạng, toán tử có độ ưu tiên cao hơn sẽ đi trước. Ví dụ: vì phép nhân có quyền ưu tiên cao hơn phép cộng, nên a + b * c được coi là a + [b * c]a * b + c được coi là [a * b] + c


tính liên kết

Khi hai toán tử chia sẻ một toán hạng và các toán tử có cùng mức độ ưu tiên, thì biểu thức được đánh giá theo tính kết hợp của các toán tử. Ví dụ: vì toán tử ** có tính kết hợp từ phải sang trái, nên a ** b ** c được coi là a ** [b ** c]. Mặt khác, vì toán tử / có tính kết hợp từ trái sang phải, nên

[[year % 4 == 0] and [year % 100 != 0]] or [year % 400 == 0]
0 được coi là
[[year % 4 == 0] and [year % 100 != 0]] or [year % 400 == 0]
1


Quyền ưu tiên và tính liên kết của các toán tử Python

Chứa một bảng hiển thị tất cả các toán tử Python từ mức ưu tiên thấp nhất đến cao nhất và lưu ý tính kết hợp của chúng. Hầu hết các lập trình viên đều không nhớ hết, còn những cái nào nhớ thì vẫn dùng dấu ngoặc đơn cho rõ ràng


Trình tự đánh giá

Trong Python, toán hạng bên trái luôn được đánh giá trước toán hạng bên phải. Điều đó cũng áp dụng cho các đối số chức năng

Python sử dụng đoản mạch khi đánh giá các biểu thức liên quan đến toán tử

[[year % 4 == 0] and [year % 100 != 0]] or [year % 400 == 0]
2 hoặc
[[year % 4 == 0] and [year % 100 != 0]] or [year % 400 == 0]
3. Khi sử dụng các toán tử đó, Python không đánh giá toán hạng thứ hai trừ khi cần giải quyết kết quả. Điều đó cho phép các câu lệnh như
[[year % 4 == 0] and [year % 100 != 0]] or [year % 400 == 0]
4 hoạt động đáng tin cậy


Thứ tự ưu tiên Gone Awry

Đôi khi thứ tự ưu tiên được xác định trong một ngôn ngữ không phù hợp với các chuẩn mực toán học. Ví dụ: trong Microsoft Excel, -a^b được hiểu là [-a]^b thay vì -[a^b]. Vì vậy -1^2 bằng 1 thay vì -1, đây là giá trị mà hầu hết các nhà toán học mong đợi. Microsoft thừa nhận điều này là một "lựa chọn thiết kế". Người ta tự hỏi liệu lập trình viên có dựa vào thứ tự ưu tiên của C trong đó các toán tử một ngôi có quyền ưu tiên cao hơn các toán tử nhị phân hay không. Quy tắc này phù hợp với các quy ước toán học cho tất cả các toán tử C, nhưng không thành công khi thêm toán tử lũy thừa. Sau khi đơn hàng được thiết lập trong Microsoft Excel 2. 0, nó không thể dễ dàng thay đổi mà không vi phạm khả năng tương thích ngược


bài tập

  1. Thêm dấu ngoặc đơn vào biểu thức sau để làm rõ thứ tự đánh giá

    year % 4 == 0 and year % 100 != 0 or year % 400 == 0
    

    Câu trả lời. năm nhuận đa dạng. py hiển thị nhiều biểu thức tương đương, bao gồm cả sự thay thế hợp lý sau

    Thứ tự ưu tiên cho Python là gì?

    Trả lời. Thứ tự ưu tiên chính xác do PEMDAS đưa ra có nghĩa là Dấu ngoặc đơn [], Hàm mũ **, Phép nhân *, Phép chia /, Phép cộng +, Phép trừ - .

    Điều gì có thứ tự ưu tiên cao nhất trong Python?

    Python tuân theo các quy tắc ưu tiên giống như toán học đối với các toán tử toán học của nó. Dấu ngoặc đơn có quyền ư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. Vì các biểu thức trong ngoặc đơn được đánh giá trước, nên 2 * [3-1] là 4 và [1+1]**[5-2] là 8.

    Thứ tự ưu tiên cao nhất là gì?

    Giải thích. Toán tử ++ có mức ưu tiên cao nhất so với / , * và +.

    Ưu tiên thấp nhất trong Python là gì?

    Biểu thức Bài tập mới [. =] toán tử từ Python 3. 8 trở đi có mức độ ưu tiên thấp nhất trong khi dấu ngoặc đơn [] có mức độ ưu tiên cao nhất.

Chủ Đề