Trong Python, các toán tử được thực hiện theo một thứ tự nhất định, tương tự như quy tắc thực hiện phép tính trong toán học. Để hiểu rõ hơn về thứ tự ưu tiên toán tử trong Python và cách nó ảnh hưởng đến kết quả của biểu thức, hãy cùng tìm hiểu chi tiết trong bài viết này.
Các điểm chính
Khi đọc xong bài viết, bạn sẽ:
- Hiểu rõ bản chất của thứ tự ưu tiên toán tử: Nắm vững định nghĩa và tầm quan trọng của việc xác định thứ tự thực hiện các phép toán.
- Làm chủ bảng thứ tự ưu tiên toán tử Python: Biết cách tra cứu và áp dụng bảng này để đảm bảo tính chính xác của code.
- Vận dụng linh hoạt thông qua các ví dụ minh họa: Thực hành các ví dụ cụ thể giúp bạn hiểu sâu hơn cách toán tử được xử lý theo thứ tự ưu tiên.
- Nâng cao kỹ năng giải quyết các bài toán phức tạp: Phát triển khả năng tư duy logic và giải quyết các bài toán liên quan đến nhiều toán tử.
- Biết đến Vietnix – Nhà cung cấp dịch vụ VPS toàn diện: Từ hiệu suất đến bảo mật.
Thứ tự ưu tiên toán tử trong Python
Khi một biểu thức có nhiều toán tử, thứ tự ưu tiên toán tử (Operator Precedence) sẽ quyết định trình tự thực hiện các phép toán. Nếu một biểu thức bao gồm nhiều toán tử, thứ tự thực hiện các toán tử sẽ tuân theo quy tắc ưu tiên. Ví dụ, hãy xem xét biểu thức sau:
a = 2 + 3 * 5
Giá trị của a là bao nhiêu? Sẽ là 17 (nhân 3 với 5 trước rồi cộng với 2) hay 25 (cộng 2 và 3 trước, sau đó nhân với 5)? Đây chính là lúc quy tắc ưu tiên toán tử trong Python được áp dụng.

Nếu chúng ta chỉ xét các toán tử số học trong Python, trình thông dịch Python cũng áp dụng quy tắc BODMAS quen thuộc (hay PEMDAS ở một số nước). Tức là các phép toán trong ngoặc được ưu tiên trước, tiếp theo là phép chia và phép nhân, rồi đến phép cộng và phép trừ. Vì vậy, giá trị của a trong biểu thức trên sẽ là 17.
Để dễ hình dung hơn, bạn cứ xem phép tính như là một bài toán ở trường. Bình thường, các thầy cô luôn dặn, bài toán mà có nhiều phép tính thì phải “nhân chia trước, cộng trừ sau” đúng không? Với Python, ngôn ngữ lập trình này cũng sẽ làm đúng y như vậy!
Bên cạnh thứ tự ưu tiên, tính kết hợp (associativity) của các toán tử cũng quan trọng. Nếu một biểu thức có nhiều toán tử có cùng mức ưu tiên, tính kết hợp sẽ xác định trình tự thực hiện. Hầu hết các toán tử có tính kết hợp từ trái sang phải. Điều này có nghĩa là toán tử ở bên trái sẽ được thực hiện trước toán tử ở bên phải.
Hãy xem xét một biểu thức khác:
b = 10 / 5 * 4
Trong trường hợp này, cả hai toán tử * (nhân) và / (chia) đều có cùng mức ưu tiên. Tuy nhiên, nhờ tính kết hợp từ trái sang phải, phép chia 10 / 5 sẽ được thực hiện trước, cho ra kết quả là 2. Sau đó, kết quả này sẽ được nhân với 4 (2 * 4), giá trị cuối cùng của b sẽ là 8.
Bảng thứ tự ưu tiên toán tử trong Python
Bảng dưới đây liệt kê các toán tử trong Python theo thứ tự ưu tiên giảm dần.
Stt | Toán tử & mô tả |
1 | () ,[] , {} Dấu ngoặc tròn, ngoặc vuông và ngoặc nhọn |
2 | [index] , [index:index] Truy cập phần tử (subscription), cắt (slicing) |
3 | await x Biểu thức await |
4 | ** Lũy thừa |
5 | +x , -x , ~x Dương (Positive), âm (negative), đảo bit (bitwise NOT) |
6 | * , @ , / , // , % Nhân, nhân ma trận, chia, chia lấy phần nguyên, chia lấy dư |
7 | + , - Cộng và trừ |
8 | << , >> Dịch trái, dịch phải (bit) |
9 | & AND (bit) |
10 | ^ XOR (bit) |
11 | | OR (bit) |
12 | in , not in , is , is not , < , <= , > , >= , != , == So sánh, bao gồm kiểm tra phần tử (membership) và kiểm tra đồng nhất (identity) |
13 | not x NOT (logic) |
14 | and AND (logic) |
15 | or OR (logic) |
16 | if – else Biểu thức điều kiện |
17 | lambda Biểu thức Lambda |
18 | := Toán tử Walrus |
Ví dụ về thứ tự ưu tiên toán tử trong Python
Khi làm việc với nhiều toán tử trong cùng một biểu thức, Python cần một quy tắc để biết nên thực hiện toán tử nào trước. Quy tắc này được gọi là “thứ tự ưu tiên của toán tử”. Hãy cùng xem xét ví dụ sau để hiểu rõ hơn về quy tắc này:
a = 20
b = 10
c = 15
d = 5
e = 0
e = (a + b) * c / d # (30 * 15) / 5
print ("Giá trị của (a + b) * c / d là ", e)
e = ((a + b) * c) / d # (30 * 15) / 5
print ("Giá trị của ((a + b) * c) / d là ", e)
e = (a + b) * (c / d) # (30) * (15/5)
print ("Giá trị của (a + b) * (c / d) là ", e)
e = a + (b * c) / d # 20 + (150/5)
print ("Giá trị của a + (b * c) / d là ", e)
Kết quả khi chạy chương trình:
Giá trị của (a + b) * c / d là 90.0
Giá trị của ((a + b) * c) / d là 90.0
Giá trị của (a + b) * (c / d) là 90.0
Giá trị của a + (b * c) / d là 50.0
Ví dụ trên cho thấy:
- Phép toán trong ngoặc
()
luôn được ưu tiên thực hiện trước. - Trong trường hợp không có ngoặc, phép nhân (
*
) và phép chia (/
) có độ ưu tiên cao hơn phép cộng (+
) và phép trừ (-
).
Vietnix – Nhà cung cấp dịch vụ VPS toàn diện: Từ hiệu suất đến bảo mật
Với hơn 12 năm kinh nghiệm và hơn 100,000 dịch vụ đã được kích hoạt, Vietnix tự tin cung cấp giải pháp thuê VPS hiệu suất cao, đáp ứng đa dạng nhu cầu từ website cá nhân đến doanh nghiệp. Sử dụng ổ cứng SSD/NVMe Enterprise, CPU Intel Xeon/AMD và công nghệ ảo hóa tiên tiến, dịch vụ đảm bảo tốc độ tải trang vượt trội, kết nối ổn định với tốc độ lên đến 200Mbps trong nước và 20Mbps quốc tế. Bên cạnh đó, khách hàng được trải nghiệm giao diện quản trị trực quan, tùy chỉnh linh hoạt, sao lưu dữ liệu tự động hàng tuần và lựa chọn đa dạng hệ điều hành.
Đối với những yêu cầu về hiệu suất cao, thì VPS NVMe của Vietnix là lựa chọn lý tưởng. Được trang bị ổ cứng NVMe tốc độ cao gấp 10 lần SSD truyền thống và CPU Intel Platinum, VPS NVMe xử lý mọi tác vụ nhanh chóng, mang đến trải nghiệm người dùng vượt trội. Tốc độ mạng 400Mbps, hỗ trợ kỹ thuật 24/7 đa kênh, sao lưu dữ liệu định kỳ và toàn quyền quản trị giúp khách hàng hoàn toàn kiểm soát máy chủ. Đạt chuẩn ISO 27001:2022 (ISMS) và ISO 9001:2015 (QMS), dịch vụ VPS NVMe của Vietnix đảm bảo an toàn dữ liệu và chất lượng dịch vụ đạt chuẩn quốc tế.
Thông tin liên hệ:
- Hotline: 18001093
- Email: sales@vietnix.com.vn
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
- Website: https://vietnix.vn/
Vậy là chúng ta vừa cùng nhau tìm hiểu chi tiết về thứ tự ưu tiên của các toán tử trong Python. Hi vọng qua bài viết này, bạn đã nắm vững được quy tắc này và có thể áp dụng nó một cách hiệu quả trong quá trình lập trình. Việc hiểu rõ thứ tự ưu tiên toán tử sẽ giúp bạn viết code chính xác hơn, tránh những lỗi không đáng có và tối ưu hóa hiệu suất chương trình.
Mọi người cũng đọc