Chương này là từ cuốn sách
Thứ tự đánh giá
Bảng 4.2 liệt kê thứ tự hoạt động [quy tắc ưu tiên] cho các toán tử Python. Tất cả các toán tử ngoại trừ toán tử nguồn [**] được đánh giá từ trái sang phải và được liệt kê trong bảng từ ưu tiên cao nhất đến thấp nhất. Đó là, các toán tử được liệt kê đầu tiên trong bảng được đánh giá trước khi các nhà khai thác được liệt kê sau. .
Bảng 4.2 Thứ tự đánh giá [cao nhất đến thấp nhất]
Nhà điều hành | Tên |
[...], [...], {...} | Tuple, Danh sách và sáng tạo từ điển |
´ ... ôi | Chuyển đổi chuỗi |
s [i], s [i: j] | Lập chỉ mục và cắt lát |
s.attr | Thuộc tính |
f[...] | Các cuộc gọi chức năng |
+x, -x, ~ x | Các nhà khai thác đơn |
x ** y | Quyền lực [liên kết đúng] |
x * y, x / y, x // y, x % y | Phép nhân, phân chia, phân chia sàn, modulo |
x + y, x - y | Ngoài ra, trừ |
x > y | Bit-shifting |
X & Y. | Bitwise và |
x ^ y | BitWise độc quyền hoặc |
x | y | Bitwise hoặc |
x < y, x y, x >= y, | Các bài kiểm tra thành viên so sánh, bản sắc và trình tự |
x == y, x! = y | |
x y | |
x là y, x không phải y | |
x trong s, x không phải trong s | |
không phải x | Phủ định logic |
x và y | Hợp lý và |
x hoặc y | Hợp lý hoặc |
Lambda args: expr | Hàm ẩn danh |
Python's Eval [] cho phép bạn đánh giá các biểu thức Python tùy ý từ đầu vào dựa trên mã dựa trên chuỗi hoặc được biên dịch. Hàm này có thể tiện dụng khi bạn đang cố gắng đánh giá động các biểu thức python từ bất kỳ đầu vào nào đến dưới dạng chuỗi hoặc đối tượng mã được biên dịch.rules of precedence. Python follows the same precedence rules for its mathematical operators that mathematics does. Khi 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 các quy tắc ưu tiên. Python tuân theo các quy tắc ưu tiên tương tự cho các nhà khai thác toán học mà toán học làm. Số mũ có quyền ưu tiên cao nhất tiếp theo, vì vậy 2**1+1
là 3 và không phải 4, và 3*1**3
là 3 và không 27. Bạn có thể giải thích tại sao không?
Nhân hóa và cả hai toán tử phân chia có cùng mức độ ưu tiên, cao hơn so với cộng và 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.
Các nhà khai thác có cùng mức độ được đánh giá từ trái sang phải. Trong đại số, chúng tôi nói rằng họ 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 để nhận 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]
, là 1.
Ghi chú
Do một số câu đố lịch sử, một ngoại lệ đối với quy tắc liên kết từ trái sang phải là nhà điều hành số mũ **
. Một gợi ý hữu ích là luôn 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:
Ghi chú
Đây là một 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à [] chỉ ra một cuộc gọi chức năng, với các đầu vào đi vào bên trong dấu ngoặc đơn. Làm thế nào Python có thể cho biết khi dấu ngoặc đơn quy định để gọi một hàm và khi chúng chỉ buộc thứ tự hoạt động cho các biểu thức toán tử mơ hồ?
Câu trả lời là nếu có một biểu thức ở bên trái của dấu ngoặc đơn đánh giá thành một đối tượng hàm, thì dấu ngoặc đơn biểu thị một cuộc gọi chức năng, và nếu không thì không. Bạn sẽ phải làm quen với việc thực hiện suy luận tương tự khi bạn nhìn thấy dấu ngoặc đơn: Đây có phải là một cuộc gọi chức năng hay chỉ chỉ định ưu tiên?
Kiểm tra việc hiểu của bạn
- 14
- Sử dụng dấu ngoặc đơn, biểu thức được đánh giá là [2*5] trước tiên, sau đó [10 // 3], sau đó [16-3], và sau đó [13+1].
- 24
- Hãy nhớ rằng * đã được ưu tiên hơn -.
- 3
- Hãy nhớ rằng // đã được ưu tiên hơn -.
- 13.667
- Hãy nhớ rằng // không phân chia số nguyên.
Giá trị của biểu thức sau:
Đây là một hình ảnh động cho biểu thức trên:
Bạn đã thử các hoạt động trên trang này of activities on this page