Làm cách nào để nhớ mức độ ưu tiên của toán tử trong python?

Sau khi tôi viết về toán tử trong python, điều cần nhớ là về thứ tự ưu tiên. Một biểu thức có các ưu tiên công việc khác nhau. Đó là lý do tại sao nếu có một biểu thức liên quan đến một số toán tử, thì việc thực hiện nó được xác định theo mức độ ưu tiên

Ví dụ.
1 + 17 * 2

Dựa vào ví dụ trên, thao tác đầu tiên được thực hiện là phép nhân. Vì phép nhân có quyền ưu tiên cao hơn phép cộng. Nếu một biểu thức liên quan đến các toán tử có cùng mức độ ưu tiên, nó thường được thực hiện từ trái sang phải

Ví dụ.
1 + 17–2

Đôi khi, thứ tự thực hiện trong một biểu thức không phụ thuộc vào mức độ ưu tiên của toán tử cần được đặt. Điều này có thể được thực hiện bằng cách sử dụng dấu ngoặc đơn

Ví dụ.
(1 + 17) * 2

Kết quả là 36. Trong ví dụ này, dấu ngoặc đơn tạo ra phép cộng 1 và 17 được thực hiện trước, vì chúng được bao quanh bởi một cặp dấu ngoặc đơn, sau đó nhân với 2 sẽ có kết quả là 36

Bây giờ tôi muốn chia sẻ với các bạn Bảng ưu tiên toán tử Python, bảng này hoạt động với tôi khi tôi viết biểu thức

Cấp độ ưu tiên toán tử Python

Ưu tiên điều hành. Nó chỉ ra thứ tự đánh giá các toán tử trong một biểu thức

tính liên kết. Nó xác định thứ tự mà các toán tử có cùng mức độ ưu tiên được đánh giá trong một biểu thức. Liên kết có thể từ trái sang phải hoặc phải sang trái

Từ bảng, chúng ta có thể thấy dấu ngoặc đơn () có giá trị ưu tiên cao nhất. Điều này chỉ ra rằng trong một câu lệnh liên quan đến nhiều toán tử cùng một lúc, mọi thao tác nằm trong dấu ngoặc đơn () sẽ được thực hiện trước.
Khi đó, nếu có nhiều thao tác trong cặp ngoặc đơn () thì dấu ngoặc ngoài cùng bên trái sẽ được thực hiện trước vì chiều làm việc của cặp ngoặc đơn () là từ trái sang phải.

Từ ví dụ trên, mặc dù toán tử nhân (*) có độ ưu tiên cao hơn toán tử trừ (-), nhưng dấu ngoặc đơn() sẽ khiến Python thực hiện phần trừ trước, kết quả sẽ là 10

Khi có nhiều hơn một toán tử xuất hiện trong một biểu thức, thứ tự đánh giá phụ thuộc vào quy tắc ưu tiên. Python tuân theo các quy tắc ưu tiên tương tự cho các toán tử toán học của nó mà toán học thực hiện

  1. 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. 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. Bạn cũng có thể sử dụng dấu ngoặc đơn để làm cho một biểu thức dễ đọc hơn, như trong (minute * 100) / 60. trong trường hợp này, dấu ngoặc đơn không thay đổi kết quả, nhưng chúng củng cố rằng biểu thức trong ngoặc đơn sẽ được đánh giá trước

  2. Luỹ thừa có mức độ ưu tiên cao nhất tiếp theo, vì vậy 2**1+1 là 3 chứ không phải 4 và 3*1**3 là 3 chứ không phải 27. Bạn có thể giải thích lý do tại sao?

  3. Cả hai toán tử nhân và chia đều có cùng mức độ ưu tiên, cao hơn phép cộng và phép trừ cũng có cùng mức độ ưu tiên. Vì vậy, 2*3-1 mang lại 5 thay vì 4 và 5-2*2 là 1, không phải 6

  4. Các toán tử có cùng mức độ ưu tiên được đánh giá từ trái sang phải. Trong đại số chúng ta nói chúng là liên kết trái. Vì vậy, trong biểu thức 6-3+2, phép trừ xảy ra trước, mang lại 3. Sau đó chúng tôi thêm 2 để có được kết quả 5. Nếu các hoạt động đã được đánh giá từ phải sang trái, kết quả sẽ là 6-(3+2), tức là 1

Ghi chú

Do một số vấn đề lịch sử, một ngoại lệ đối với quy tắc kết hợp từ trái sang phải là toán tử lũy thừa **. Một gợi ý hữu ích là luôn sử dụng dấu ngoặc đơn để buộc chính xác thứ tự bạn muốn khi có liên quan đến lũy thừa

Ghi chú

Đây là cách thứ hai mà dấu ngoặc đơn được sử dụng trong Python. Cách đầu tiên mà bạn đã thấy là () biểu thị một lệnh gọi hàm, với các đầu vào nằm trong dấu ngoặc đơn. Làm cách nào Python có thể biết khi nào dấu ngoặc đơn chỉ định gọi một hàm và khi nào chúng chỉ buộc thứ tự các phép toán cho các biểu thức toán tử không rõ ràng?

Câu trả lời là nếu có một biểu thức ở bên trái dấu ngoặc đánh giá một đối tượng hàm, thì dấu ngoặc đơn biểu thị lệnh gọi hàm, còn nếu không thì không. Bạn sẽ phải làm quen với việc đưa ra suy luận tương tự khi nhìn thấy dấu ngoặc đơn. đây có phải là một lệnh gọi hàm hay chỉ xác định mức độ ưu tiên?

Một biểu thức trong python bao gồm các biến, toán tử, giá trị, v.v. Khi trình thông dịch Python gặp bất kỳ biểu thức nào chứa một số phép toán, tất cả các toán tử sẽ được đánh giá theo một hệ thống phân cấp có thứ tự, được gọi là quyền ưu tiên của toán tử

Bảng ưu tiên toán tử Python

Dưới đây là bảng thứ tự ưu tiên toán tử trong python, tăng dần từ trên xuống và giảm dần từ dưới lên trên

OperatorDescription:=Assignment expressionlambdaLambda expressionif-elseConditional expressionorBoolean ORandBoolean ANDnot xBoolean NOT<, <=, >, >=,Comparison operators!=, ==Equality operatorsin, not in, is, is not,Identity operators, membership operators|Bitwise OR^Bitwise XOR&Bitwise AND<<, >>Left and right Shifts+, –Addition and subtraction*, @, /, //, %Multiplication, matrix multiplication, division, floor division, remainder+x, -x, ~xUnary plus, Unary minus, bitwise NOT**Exponentiationawait xAwait expressionx[index], x[index], x(arguments…), x.attributeSubscription, slicing, call, attribute reference() Parentheses(Highest precedence)

Quy tắc ưu tiên toán tử Python - PEMDAS

Ưu tiên toán tử trong python tuân theo quy tắc PEMDAS cho các biểu thức số học. Thứ tự ưu tiên của các toán tử được liệt kê dưới đây theo thứ tự từ cao đến thấp

Đầu tiên, các dấu ngoặc sẽ được đánh giá, sau đó là lũy thừa, v.v.

  • P – Dấu ngoặc đơn
  • E – Luỹ thừa
  • M – Phép nhân
  • D – Bộ phận
  • A – Bổ sung
  • S – Phép trừ

Trong trường hợp liên kết có nghĩa là, nếu hai toán tử có độ ưu tiên bằng nhau xuất hiện trong biểu thức, thì quy tắc kết hợp được tuân theo

Quy tắc kết hợp

Tất cả các toán tử, ngoại trừ lũy thừa (**) đều theo phép kết hợp từ trái sang phải. Nó có nghĩa là việc đánh giá sẽ tiến hành từ trái sang phải, trong khi đánh giá biểu thức

Ví dụ- (43+13−9/3∗7)(43 + 13 - 9/3 * 7)(43+13−9/3∗7)

Trong trường hợp này, mức độ ưu tiên của phép nhân và phép chia là bằng nhau, nhưng hơn nữa, chúng sẽ được đánh giá theo tính kết hợp từ trái sang phải

Hãy thử giải biểu thức này bằng cách tách nó ra và áp dụng quy tắc ưu tiên và kết hợp

  • Thông dịch viên gặp dấu ngoặc đơn (. Do đó nó sẽ được đánh giá đầu tiên
  • Sau này có bốn toán tử +++, −-−, ∗*∗ và ///
  • Ưu tiên của (/,(/,(/, và ∗)>*) >∗)> Ưu tiên của (+,−)(+, -)(+,−)
  • Chúng ta chỉ có thể sử dụng thứ tự ưu tiên của toán tử nếu tất cả các toán tử thuộc về các cấp độ khác nhau từ bảng phân cấp, đây không phải là trường hợp trong ví dụ của chúng ta
  • Quy tắc kết hợp sẽ được tuân theo đối với các toán tử có cùng mức độ ưu tiên
  • Biểu thức này sẽ được tính từ trái sang phải, 9/3∗79 / 3 * 79/3∗7 = 3∗73 * 73∗7 = 212121
  • Bây giờ, biểu thức của chúng ta đã trở thành 43+13−2143+13-2143+13−21
  • Từ trái sang phải Quy tắc kết hợp sẽ được tuân thủ lại. Vì vậy, giá trị cuối cùng của biểu thức sẽ là, 43+13−2143+13-2143+13−21 = 56−2156-2156−21 = 353535

ví dụ

Dưới đây là hai ví dụ để minh họa thứ tự ưu tiên của toán tử trong python. Xem phần giải thích để hiểu rõ về cách thức hoạt động của những thứ này trong nội bộ

Python xác định quyền ưu tiên của toán tử như thế nào?

Bảng sau liệt kê tất cả các toán tử theo thứ tự ưu tiên cao nhất đến thấp nhất. Độ ưu tiên của toán tử ảnh hưởng đến cách một biểu thức được đánh giá. Ví dụ: x = 7 + 3 * 2;

Thứ tự ưu tiên chính xác trong 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ừ - .

Bodmas có được theo sau bằng Python không?

Python tuân theo các quy tắc ưu tiên toán học truyền thống, quy định rằng phép nhân và phép chia được thực hiện trước phép cộng và phép trừ. ( Bạn có thể nhớ BODMAS. )