Đánh giá thứ tự thực hiện các biểu thức khác nhau bằng cách đánh giá chúng thông qua chương trình python

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 đơn 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ộ

Ví dụ: x = 7 + 3 * 2;

Tại đây, các toán tử có mức độ ưu tiên cao nhất sẽ xuất hiện ở đầu bảng, những toán tử có mức độ ưu tiên thấp nhất sẽ xuất hiện ở cuối bảng

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, chẳng 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, cho kết quả là 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?

Thứ tự đánh giá các biểu thức trong Python là gì?

Thứ tự đánh giá . Đ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ử và hoặc hoặc. the left operand is always evaluated before the right operand. That also applies to function arguments. Python uses short circuiting when evaluating expressions involving the and or or operators.

Thứ tự thực hiện biểu thức trong Python là gì?

Trong một biểu thức, ưu tiên toán tử được áp dụng và trên mỗi biểu thức, thứ tự đánh giá được sử dụng . văn bản. lệnh gọi find() xuất hiện trước toán tử cộng + vì nó có mức độ ưu tiên cao hơn. Đối với các toán tử có mức độ ưu tiên như nhau, việc đánh giá sẽ đi từ trái sang phải.

Thứ tự đánh giá biểu thức là gì?

Khi đánh giá một biểu thức, hãy tiến hành theo thứ tự này. dấu ngoặc đơn được thực hiện trước. số mũ được thực hiện tiếp theo. phép nhân và phép chia được thực hiện khi chúng được thực hiện từ trái sang phải.

Toán tử Python nào có mức ưu tiên cao nhất trong việc đánh giá một biểu thức?

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.