Với một biểu thức có nhiều toán tử, bạn sẽ xử lý nó như thế nào? . What is 2+3*4%5-1? 13 or 3? To answer such questions, you will need to know what comes first.
Trong hướng dẫn Ưu tiên toán tử Python này, chúng tôi giải quyết vấn đề này. Hơn nữa, chúng ta sẽ học PEMDAS và đoản mạch trong python. Cuối cùng, chúng ta sẽ thảo luận về tính kết hợp của Toán tử Python
Vì vậy, hãy bắt đầu hướng dẫn Ưu tiên toán tử Python
Ưu tiên toán tử Python – PEMDAS & Đoản mạch
Đầu tiên, hãy ôn lại một chút về Python Operator
Bảng ưu tiên toán tử Python
Hãy xem bảng sau về Ưu tiên toán tử Python
Mô tả toán tử [] [Mức ưu tiên cao nhất]Dấu ngoặc đơn [nhóm]f[args…]Gọi hàm[biểu thức…], [biểu thức…], {key. value…}, {expressions…}Hiển thị ràng buộc hoặc bộ, hiển thị danh sách, hiển thị từ điển, hiển thị bộx[chỉ mục], x[chỉ mục. chỉ mục], x[đối số], x. thuộc tínhĐăng ký, cắt, gọi, tham chiếu thuộc tínhawait xĐang chờ biểu thức**Lũy thừa+x+x, –x, ~xDương, âm, theo bit NOT*, @, /, //, %Phép nhân, chia, dư+, –Cộng, trừ> 4+3đầu ra
7
4+3 là một biểu thức với một toán tử. Chúng ta cũng có thể đưa vào nhiều hơn một. Các quy tắc ưu tiên chỉ cho chúng ta cách thực hiện theo một đơn đặt hàng. Phép chia có độ ưu tiên cao hơn phép cộng
>>> 3+3/3
đầu ra
4. 0
Tuy nhiên, khi chúng ta sử dụng dấu ngoặc đơn, chúng ta có thể thay đổi thứ tự thực hiện tại đây
>>> [3+3]/3
đầu ra
2. 0
Điều chúng tôi kết luận ở đây là bằng cách sử dụng dấu ngoặc đơn, chúng tôi có thể buộc các toán tử có mức độ ưu tiên thấp hơn chạy trước
Hoặc chúng ta có thể nói rằng khi hai toán tử dùng chung một toán hạng, toán tử có quyền ưu tiên cao hơn sẽ đi trước
Ưu tiên toán tử Python – PEMDAS
Nếu bạn đang đọc trang này về Python, chắc chắn bạn đã nghe nói về BODMAS ở đâu đó trong hành trình của bạn cho đến nay [toán học, trường học]. Tuy nhiên, trong Python, chúng ta bắt gặp PEMDAS.
Dấu ngoặc đơn
Lũy thừa
Phép nhân
Phép chia
Phép cộng
Subtraction
Một bản ghi nhớ cần nhớ sẽ là “Xin thứ lỗi cho dì Susie thân mến của tôi”.
Hãy lấy một ví dụ
>>> [[[[13+5]*2]-4]/2]-13
đầu ra
3. 0
Điều đó xảy ra như thế nào? .
13+5 cho ta 18
18*2 cho ta 36
36-4 cho ta 32
32/2 gives us 16.0 #Lưu ý rằng phép chia cho chúng ta số float.
16-13 cho ta 3. 0
Ưu tiên toán tử Python – Đoản mạch
Python luôn đánh giá toán hạng bên trái trước toán hạng bên phải- ngay cả trong các đối số hàm. Đối với các biểu thức có các phép tính và hoặc , nó sử dụng đoản mạch. Điều này có nghĩa là nó chỉ đánh giá toán hạng thứ hai cho đến khi cần. Do đó, các tuyên bố như vậy có thể hoạt động đáng tin cậy.
Ưu tiên toán tử Python – Đoản mạch
>>> if[s!=None] and [len[s]>> 0 or "Hello" and 1
đầu ra
1
Điều này không cho chúng tôi "Xin chào", mà là 1, bởi vì.
0 hoặc “Xin chào” cho chúng tôi “Xin chào”
“Xin chào” và 1 cho chúng tôi 1
b. Đoản mạch với all[]/any[]
Điều này cũng hoạt động với các hàm all[] và any[]
>>> def check[i]: return i >>> all[check[i] for i in [1,1,0,0,3]]
đầu ra
Sai
Điều này dừng ở Sai đầu tiên mà nó nhận được [0 ở vị trí thứ ba] và trả về Sai
>>> any[check[i] for i in [0,0,0,1,3]]
đầu ra
Thật
Điều này dừng ở giá trị True đầu tiên mà nó nhận được [số 1 ở vị trí thứ tư] và trả về giá trị True
c. Đoản mạch với các toán tử có điều kiện
Xem cách điều này diễn ra với các toán tử có điều kiện như > và 8 và trả về Sai
d. Đoản mạch với các nhà khai thác ternary
Bây giờ, hãy xem xét biểu thức sau đây là toán tử bậc ba .
>>> print["One"] if print["Two"] else print["Three"]
đầu ra
Hai
Ba
Điều gì xảy ra ở đây? .
Đầu tiên Python kiểm tra điều kiện print[“Two”]. Khi đánh giá điều này, nó in ra “Hai”. Ngoài ra, giá trị Boolean cho điều này là Sai.
>>> 3+3/30
đầu ra
Hai
Sai
Vì nó là Sai nên nó không đánh giá print[“One”] và chỉ đánh giá print[“Ba”].
Do đó, kết quả cuối cùng chúng tôi nhận được là.
Hai
Ba
Tính liên kết của các toán tử trong Python
Trong bảng trên, nhiều ô có nhiều hơn một toán tử. Những chia sẻ ưu tiên. Vì vậy, sau đó, mà để đánh giá đầu tiên?
Hiệp hội đến để giải cứu ở đây. Nhiều toán tử có tính kết hợp từ trái sang phải
a. Toán tử liên kết
- Phép nhân [*] và phép chia tầng [//]
Ví dụ: hãy xem xét các toán tử nhân [*] và chia sàn [//]. Xem cách toán hạng bên trái đánh giá trước
>>> 3+3/31
đầu ra
3
>>> 3+3/32
đầu ra
3
Mặc dù cả hai đều cho chúng ta cùng một kết quả, nhưng chúng thực hiện điều đó theo những cách khác nhau. Xem như thế nào.
Ví dụ đầu tiên.
3*5 cho ta 15
15//4 cho ta 3
Ví dụ thứ hai.
5//4 cho ta 1
3*1 cho ta 3
- Lũy thừa [**]
Bây giờ, hãy thử điều này trên lũy thừa
>>> 3+3/33
đầu ra
64
Và bây giờ không có dấu ngoặc đơn
>>> 3+3/34
đầu ra
512
Điều này là do điều này tương đương với.
2**[3**2]
Điều này mang lại cho chúng ta 2**9
Điều này mang lại cho chúng ta 512
b. Toán tử không liên kết
Toán tử gán và so sánh không liên kết. Điều này có nghĩa là x