Chào Hari,
Quy tắc cho các toán tử gán tăng cường như
mylist = [10, 20]
new = mylist + [30, 40] # Can only add list to list.
print[new]
65 là, nhưcác toán tử khác, họ gọi một phương thức "dunder" [dấu gạch dưới kép] đặc biệt
để cho phép các lớp tùy chỉnh những gì hoạt động thực hiện
Nếu hoạt động dunder đặc biệt không tồn tại, thì tăng cường
phép gán rơi vào toán tử bình thường
Vì vậy hoạt động
obj += x
biến thành một cái gì đó như thế này trong trình thông dịch
Liệu
66 có phương pháp đặc biệtmylist = [10, 20] new = mylist + [30, 40] # Can only add list to list. print[new]
67?mylist = [10, 20] new = mylist + [30, 40] # Can only add list to list. print[new]
Nếu vậy, hãy chạy
68mylist = [10, 20] new = mylist + [30, 40] # Can only add list to list. print[new]
Nếu không, hãy chạy
69mylist = [10, 20] new = mylist + [30, 40] # Can only add list to list. print[new]
Đối với số nguyên, không có phương pháp
mylist = [10, 20]
new = mylist + [30, 40] # Can only add list to list.
print[new]
67 đặc biệt nào, và do đó, phương pháp mylist = [10, 20]
new = mylist + [30, 40] # Can only add list to list.
print[new]
65hoạt động chỉ là đường cú pháp cho
mylist + x
2. Tương tự cho chuỗiNhưng các danh sách xác định một phương thức
mylist = [10, 20]
new = mylist + [30, 40] # Can only add list to list.
print[new]
67 đặc biệt, làm cho nó trở thành một phương thức thay thếnối
Đối với danh sách,
mylist + x
4 không nối danh sáchmylist + x
yêu cầu x phải là một danh sách và nó trả về một danh sách mới được tạo bởi
nối tất cả các mục của mylist và các mục của x
mylist = [10, 20]
new = mylist + [30, 40] # Can only add list to list.
print[new]
in một danh sách mới,
mylist + x
5 trong khi rời khỏi danh sách ban đầuhoang sơ
Nhưng bài tập tăng cường
mylist = [10, 20]
new = mylist + [30, 40] # Can only add list to list.
print[new]
65 thực hiện nối tại chỗmylist += x
và x có thể là bất kỳ dãy nào, không chỉ là một danh sách và nó nối chuỗi
các mục của x vào danh sách của tôi tại chỗ. Nó không tạo ra một danh sách mới
mylist = [10, 20]
mylist += [30, 40] # mylist is now [10, 20, 30, 40]
mylist += [50, 60] # tuples are okay, not just lists
mylist += "xyz" # strings are sequences too!
print[mylist]
sẽ in
mylist + x
7Vì vậy,
mylist + x
4 và mylist = [10, 20]
new = mylist + [30, 40] # Can only add list to list.
print[new]
65 cho các danh sách vẫn là nối, chỉ một chútphiên bản khác nhau
4 là phép nối danh sách với danh sách và trả về một danh sách mớimylist + x
65 nối các mục của bất kỳ trình tự hoặc trình lặp nào vớimylist = [10, 20] new = mylist + [30, 40] # Can only add list to list. print[new]
danh sách hiện có, tại chỗ
Sau khi hoàn thành hướng dẫn trước của chúng tôi về các biến Python trong loạt bài này, bây giờ bạn đã nắm vững cách tạo và đặt tên cho các đối tượng Python thuộc các loại khác nhau. Hãy làm một số công việc với họ
Đây là những gì bạn sẽ học trong hướng dẫn này. Bạn sẽ thấy cách tính toán có thể được thực hiện trên các đối tượng trong Python. Đến cuối hướng dẫn này, bạn sẽ có thể tạo các biểu thức phức tạp bằng cách kết hợp các đối tượng và toán tử
Lấy bài kiểm tra. Kiểm tra kiến thức của bạn với bài kiểm tra tương tác “Các toán tử và biểu thức Python” của chúng tôi. Sau khi hoàn thành, bạn sẽ nhận được điểm số để có thể theo dõi quá trình học tập của mình theo thời gian
Lấy bài kiểm tra "
Trong Python, các toán tử là các ký hiệu đặc biệt chỉ định rằng một số loại tính toán sẽ được thực hiện. Các giá trị mà toán tử tác động lên được gọi là toán hạng
Đây là một ví dụ
>>>
mylist + x
1Trong trường hợp này, toán tử
mylist + x
29 cộng các toán hạng mylist + x
30 và mylist + x
31 lại với nhau. Toán hạng có thể là một giá trị bằng chữ hoặc một biến tham chiếu đến một đối tượng>>>
mylist + x
5Một chuỗi các toán hạng và toán tử, như
mylist + x
32, được gọi là một biểu thức. Python hỗ trợ nhiều toán tử để kết hợp các đối tượng dữ liệu thành các biểu thức. Chúng được khám phá dưới đâytoán tử số học
Bảng sau liệt kê các toán tử số học được hỗ trợ bởi Python
Toán tửExampleMeaningResult
mylist + x
29[unary]mylist + x
34Unary positivemylist + x
30Nói cách khác, nó không thực sự làm gì cả. Nó chủ yếu tồn tại vì mục đích hoàn chỉnh, để bổ sung cho Phủ định đơn nhất.
mylist + x
29[nhị phân]mylist + x
37 Phép cộngTổng của mylist + x
30 và mylist + x
31mylist + x
40[đơn vị]mylist + x
41Giá trị phủ định đơn vị bằng mylist + x
30 nhưng ngược dấumylist + x
40 [nhị phân]mylist + x
44Phép trừmylist + x
31 trừ đi từ mylist + x
30mylist + x
47mylist + x
48Phép nhân Tích của mylist + x
30 và mylist + x
31mylist + x
51mylist + x
52Dung chia cho mylist + x
1 chia cho mylist + x
1. Kết quả luôn có kiểu
mylist + x
55. mylist + x
56mylist + x
57Số dư mô đun khi mylist + x
30 chia cho mylist + x
31mylist = [10, 20]
new = mylist + [30, 40] # Can only add list to list.
print[new]
40mylist = [10, 20]
new = mylist + [30, 40] # Can only add list to list.
print[new]
41Phép chia tầng [còn gọi là phép chia số nguyên]Thương khi mylist + x
30 chia cho mylist + x
31, làm tròn thành số nguyên nhỏ nhất tiếp theomylist = [10, 20]
new = mylist + [30, 40] # Can only add list to list.
print[new]
44mylist = [10, 20]
new = mylist + [30, 40] # Can only add list to list.
print[new]
45Lũy thừamylist + x
30 nâng lên lũy thừa của mylist + x
31Dưới đây là một số ví dụ về các toán tử này được sử dụng
>>>
mylist + x
2Kết quả của phép chia tiêu chuẩn [
mylist + x
51] luôn là mylist + x
55, ngay cả khi số bị chia chia hết cho số chia>>>
mylist + x
5Khi kết quả của phép chia sàn [
mylist = [10, 20]
new = mylist + [30, 40] # Can only add list to list.
print[new]
40] là dương, thì như thể phần phân số bị cắt bớt, chỉ để lại phần nguyên. Khi kết quả là âm, kết quả được làm tròn xuống số nguyên nhỏ nhất tiếp theo [âm lớn hơn]>>>
mylist + x
2Nhân tiện, xin lưu ý rằng trong phiên REPL, bạn có thể hiển thị giá trị của một biểu thức bằng cách chỉ cần nhập biểu thức đó tại dấu nhắc
mylist + x
81 mà không cần mylist + x
82, giống như bạn có thể làm với giá trị bằng chữ hoặc biến>>>
mylist + x
3Loại bỏ các quảng cáoToán tử so sánh
Toán tửExampleMeaningResult
mylist + x
83mylist + x
84Bằng vớimylist + x
85 nếu giá trị của mylist + x
30 bằng giá trị của mylist + x
31mylist + x
88 ngược lạimylist + x
89mylist + x
500Không bằngmylist + x
85 nếu mylist + x
30 không bằng mylist + x
31mylist + x
88 ngược lạimylist + x
505_____s___1506mylist + x
88 otherwisemylist + x
511mylist + x
512Less than or equal tomylist + x
85 if mylist + x
30 is less than or equal to mylist + x
31mylist + x
88 otherwisemylist + x
517mylist + x
518Greater thanmylist + x
85 if mylist + x
30 is greater than mylist + x
31mylist + x
88 otherwisemylist + x
523mylist + x
524Greater than or equal tomylist + x
85 if mylist + x
30 is greater than or equal to mylist + x
31mylist + x
88 otherwiseDưới đây là ví dụ về các toán tử so sánh được sử dụng
>>>
mylist + x
4Các toán tử so sánh thường được sử dụng trong ngữ cảnh Boolean như câu lệnh điều kiện và vòng lặp để điều hướng luồng chương trình, như bạn sẽ thấy sau
So sánh đẳng thức trên các giá trị dấu phẩy động
Nhớ lại từ cuộc thảo luận trước đó về các số dấu phẩy động mà giá trị được lưu trữ bên trong đối tượng
mylist + x
55 có thể không chính xác như bạn nghĩ. Vì lý do đó, việc so sánh các giá trị dấu phẩy động với sự bằng nhau chính xác là một cách làm kém. Hãy xem xét ví dụ này>>>
mylist + x
5Rất tiếc. Biểu diễn bên trong của toán hạng cộng không chính xác bằng
mylist + x
530 và mylist + x
531, vì vậy bạn không thể dựa vào mylist + x
532 để so sánh chính xác với mylist + x
533Cách ưa thích để xác định xem hai giá trị dấu phẩy động có “bằng nhau” hay không là tính toán xem chúng có gần nhau hay không, với một số dung sai. Hãy xem ví dụ này
>>>
mylist = [10, 20]
new = mylist + [30, 40] # Can only add list to list.
print[new]
4mylist + x
534 trả về giá trị tuyệt đối. Nếu giá trị tuyệt đối của chênh lệch giữa hai số nhỏ hơn dung sai đã chỉ định, thì chúng đủ gần nhau để được coi là bằng nhauToán tử logic
Các toán tử logic
mylist + x
535, mylist + x
536 và mylist + x
537 sửa đổi và kết hợp các biểu thức được đánh giá trong ngữ cảnh Boolean để tạo ra các điều kiện phức tạp hơnBiểu thức logic liên quan đến toán hạng Boolean
Như bạn đã thấy, một số đối tượng và biểu thức trong Python thực sự thuộc kiểu Boolean. Nghĩa là, chúng bằng với một trong các đối tượng Python
mylist + x
85 hoặc mylist + x
88. Hãy xem xét những ví dụ này>>>
mylist + x
8Trong các ví dụ trên,
mylist + x
540, mylist + x
541 và mylist + x
542 đều là các đối tượng hoặc biểu thức BooleanDiễn giải các biểu thức logic liên quan đến
mylist + x
535, mylist + x
536 và mylist + x
537 rất đơn giản khi các toán hạng là BooleanToán tửExampleMeaning
mylist + x
535mylist + x
547mylist + x
85 nếu mylist + x
532 là mylist + x
88mylist + x
88 nếu mylist + x
532 là mylist + x
85[Đảo ngược nghĩa của
mylist + x
532 một cách logic]mylist + x
536mylist + x
556 nếu một trong hai ____mylist + x
85 nếu một trong hai mylist + x
532 hoặc mylist + x
559 là mylist + x
85>> mylist + x
53Chuỗi
Một chuỗi rỗng là sai.
Một chuỗi khác rỗng là true.
>>>
mylist + x
54Đối tượng dữ liệu tổng hợp tích hợp
Python cung cấp các kiểu dữ liệu tổng hợp tích hợp có tên là
215,mylist + x
216,mylist + x
217 vàmylist + x
218. Đây là các loại “container” chứa các đối tượng khác. Một đối tượng thuộc một trong các loại này được coi là sai nếu nó trống và đúng nếu nó không trốngmylist + x
Các ví dụ dưới đây chứng minh điều này cho loại
215. [Danh sách được định nghĩa bằng Python với dấu ngoặc vuông. ]mylist + x
Để biết thêm thông tin về các loại
215,mylist + x
216,mylist + x
217 vàmylist + x
218, hãy xem các hướng dẫn sắp tớimylist + x
>>>
mylist + x
55Từ khóa “mylist + x
210”
mylist + x
mylist + x
210 luôn sai>>>
mylist + x
56Biểu thức logic liên quan đến toán hạng không phải Boolean
Các giá trị không phải Boolean cũng có thể được sửa đổi và nối bởi
mylist + x
535, mylist + x
536 và, mylist + x
537. Kết quả phụ thuộc vào “độ trung thực” của các toán hạng“______1535” và toán hạng không phải Boolean
Đây là những gì xảy ra với một giá trị không phải Boolean
mylist + x
532Nếu
mylist + x
532 làmylist + x
547 là “sự thật”mylist + x
88“giả dối”mylist + x
85Dưới đây là một số ví dụ cụ thể
>>>
mylist + x
57“______1536” và các toán hạng không phải Boolean
Đây là những gì xảy ra với hai giá trị không phải Boolean
mylist + x
532 và mylist + x
559Nếu
mylist + x
532 làmylist + x
556 là thậtmylist + x
532 là giả dốimylist + x
559Lưu ý rằng trong trường hợp này, biểu thức
mylist + x
556 không đánh giá thành mylist + x
85 hoặc mylist + x
88, mà thay vào đó là một trong số mylist + x
532 hoặc mylist + x
559>>>
mylist + x
58Mặc dù vậy, vẫn có trường hợp biểu thức
mylist + x
556 sẽ đúng nếu mylist + x
532 hoặc mylist + x
559 đúng và sai nếu cả mylist + x
532 và mylist + x
559 đều sai“______1537” và các toán hạng không phải Boolean
Đây là những gì bạn sẽ nhận được cho hai giá trị không phải Boolean
mylist + x
532 và mylist + x
559Nếu
mylist + x
532 làmylist + x
563 là “sự thật”mylist + x
559“giả dối”mylist + x
532>>>
mylist + x
59Như với
mylist + x
536, biểu thức mylist + x
563 không ước tính thành mylist + x
85 hoặc mylist + x
88, mà thay vào đó là một trong hai số mylist + x
532 hoặc mylist + x
559. mylist + x
563 sẽ là true nếu cả mylist + x
532 và mylist + x
559 đều là true, ngược lại là falseLoại bỏ các quảng cáoBiểu thức logic tổng hợp và đánh giá ngắn mạch
Cho đến giờ, bạn đã thấy các biểu thức chỉ có một toán tử
mylist + x
536 hoặc mylist + x
537 và hai toán hạngmylist + x
20Nhiều toán tử logic và toán hạng có thể được xâu chuỗi lại với nhau để tạo thành các biểu thức logic phức hợp
Biểu thức hợp chất “mylist + x
536”
mylist + x
Xét biểu thức sau
x1
536 x2mylist + x
536 x3mylist + x
536 … xnmylist + x
Biểu thức này là đúng nếu bất kỳ xi nào là đúng
Trong một biểu thức như thế này, Python sử dụng một phương pháp gọi là đánh giá ngắn mạch, còn được gọi là đánh giá McCarthy để vinh danh nhà khoa học máy tính John McCarthy. Các toán hạng xi được đánh giá theo thứ tự từ trái sang phải. Ngay khi một biểu thức được tìm thấy là đúng, toàn bộ biểu thức được biết là đúng. Tại thời điểm đó, Python dừng lại và không có thuật ngữ nào được đánh giá. Giá trị của toàn bộ biểu thức là của xi đã chấm dứt đánh giá
Để giúp chứng minh việc đánh giá ngắn mạch, giả sử rằng bạn có một hàm “nhận dạng” đơn giản
mylist + x
274 hoạt động như sau
274 nhận một đối số duy nhấtmylist + x
- Nó hiển thị đối số cho bàn điều khiển
- Nó trả về đối số được truyền cho nó dưới dạng giá trị trả về của nó
[Bạn sẽ thấy cách định nghĩa một hàm như vậy trong hướng dẫn sắp tới về Hàm. ]
Một số lệnh gọi ví dụ tới
mylist + x
274 được hiển thị bên dưới>>>
mylist + x
21Bởi vì
mylist + x
274 chỉ đơn giản trả về đối số được truyền cho nó, nên chúng ta có thể đặt biểu thức mylist + x
278 thành true hoặc false khi cần bằng cách chỉ định một giá trị cho mylist + x
279 là true hoặc false một cách thích hợp. Ngoài ra, mylist + x
274 hiển thị đối số của nó với bảng điều khiển, xác nhận trực quan liệu nó có được gọi hay khôngBây giờ, hãy xem xét biểu thức logic hợp chất sau
>>>
mylist + x
22Trước tiên, trình thông dịch đánh giá
mylist + x
281, là mylist + x
207. Giá trị số của mylist + x
207 là sai. Biểu thức chưa đúng, vì vậy việc đánh giá tiến hành từ trái sang phải. Toán hạng tiếp theo, mylist + x
284, trả về mylist + x
88. Điều đó cũng sai, vì vậy đánh giá tiếp tụcTiếp theo là
mylist + x
286. Điều đó đánh giá là mylist + x
287, đó là sự thật. Tại thời điểm đó, trình thông dịch dừng lại vì bây giờ nó biết toàn bộ biểu thức là đúng. mylist + x
287 được trả về dưới dạng giá trị của biểu thức và các toán hạng còn lại, mylist + x
289 và mylist + x
290, không bao giờ được đánh giá. Bạn có thể thấy từ màn hình rằng các cuộc gọi mylist + x
289 và mylist + x
290 không xảy raBiểu thức hợp chất “mylist + x
537”
mylist + x
Một tình huống tương tự tồn tại trong một biểu thức có nhiều toán tử
mylist + x
537x1
537 x2mylist + x
537 x3mylist + x
537 … xnmylist + x
Biểu thức này là đúng nếu tất cả xi đều đúng
Trong trường hợp này, đánh giá ngắn mạch yêu cầu trình thông dịch ngừng đánh giá ngay khi bất kỳ toán hạng nào được phát hiện là sai, bởi vì tại thời điểm đó, toàn bộ biểu thức được biết là sai. Khi đó là trường hợp, không có toán hạng nào nữa được đánh giá và toán hạng giả đã kết thúc đánh giá được trả về dưới dạng giá trị của biểu thức
>>>
mylist + x
23Trong cả hai ví dụ trên, việc đánh giá dừng ở thuật ngữ đầu tiên sai—
mylist + x
284 trong trường hợp đầu tiên, mylist + x
299 trong trường hợp thứ hai—và cả lệnh gọi mylist + x
289 và mylist + x
290 đều không xảy ra. mylist + x
88 và mylist + x
208, tương ứng, được trả về dưới dạng giá trị của biểu thứcNếu tất cả các toán hạng là trung thực, tất cả chúng đều được đánh giá và toán hạng cuối cùng [ngoài cùng bên phải] được trả về dưới dạng giá trị của biểu thức
>>>
mylist + x
24Loại bỏ các quảng cáoThành ngữ khai thác đánh giá ngắn mạch
Có một số mẫu thành ngữ phổ biến khai thác đánh giá ngắn mạch để diễn đạt ngắn gọn
Tránh một ngoại lệ
Giả sử bạn đã xác định hai biến
mylist + x
30 và mylist + x
31, và bạn muốn biết liệu mylist + x
506>>>
mylist + x
25Nhưng bạn cần tính đến khả năng
mylist + x
30 có thể là mylist + x
207, trong trường hợp đó, thông dịch viên sẽ đưa ra một ngoại lệ>>>
mylist + x
26Bạn có thể tránh lỗi với một biểu thức như thế này
>>>
mylist + x
27Khi
mylist + x
30 là mylist + x
207, thì mylist + x
511 là sai. Đánh giá ngắn mạch đảm bảo rằng đánh giá dừng tại điểm đó. mylist + x
512 không được đánh giá và không có lỗi nào được nêu raNếu thực tế, bạn có thể thậm chí còn ngắn gọn hơn thế. Khi
mylist + x
30 là mylist + x
207, bản thân biểu thức mylist + x
30 là sai. Không cần so sánh rõ ràng mylist + x
511>>>
mylist + x
28Chọn một giá trị mặc định
Một thành ngữ khác liên quan đến việc chọn một giá trị mặc định khi một giá trị được chỉ định bằng 0 hoặc trống. Ví dụ: giả sử bạn muốn gán một biến
mylist + x
517 cho giá trị chứa trong một biến khác có tên là mylist + x
518. Nhưng nếu mylist + x
518 trống, bạn muốn cung cấp giá trị mặc địnhĐây là một cách ngắn gọn để thể hiện điều này bằng cách sử dụng đánh giá ngắn mạch
mylist + x
29Nếu
mylist + x
518 khác rỗng, nó đúng và biểu thức mylist + x
521 sẽ đúng tại thời điểm đó. Quá trình đánh giá dừng lại và giá trị của mylist + x
518 được trả về và gán cho mylist + x
517>>>
mylist + x
50Mặt khác, nếu
mylist + x
518 là một chuỗi rỗng, nó là sai. Đánh giá của mylist + x
521 tiếp tục với toán hạng tiếp theo, mylist + x
526, được trả về và gán cho mylist + x
517>>>
mylist + x
51Loại bỏ các quảng cáoSo sánh chuỗi
Các toán tử so sánh có thể được nối với nhau theo độ dài tùy ý. Ví dụ, các biểu thức sau gần như tương đương
mylist + x
52Cả hai sẽ đánh giá cùng một giá trị Boolean. Sự khác biệt tinh tế giữa hai loại này là trong so sánh chuỗi
mylist + x
528, mylist + x
559 chỉ được đánh giá một lần. Biểu thức dài hơn mylist + x
530 sẽ khiến mylist + x
559 được đánh giá hai lầnGhi chú. Trong trường hợp
mylist + x
559 là một giá trị tĩnh, đây sẽ không phải là một sự khác biệt đáng kể. Nhưng hãy xem xét những biểu hiện nàymylist + x
53Nếu
mylist + x
274 là một hàm khiến dữ liệu chương trình bị sửa đổi, sự khác biệt giữa việc nó được gọi một lần trong trường hợp đầu tiên và hai lần trong trường hợp thứ hai có thể quan trọngTổng quát hơn, nếu op1, op2, …, opn là các toán tử so sánh, thì các toán tử sau đây có cùng giá trị Boolean
x1 op1 x2 op2 x3 … xn-1 opn xn
x1 op1 x2
537 x2 op2 x3mylist + x
537 … xn-1 opn xnmylist + x
Trong trường hợp trước, mỗi xi chỉ được đánh giá một lần. Trong trường hợp sau, mỗi cái sẽ được đánh giá hai lần ngoại trừ lần đầu tiên và lần cuối cùng, trừ khi việc đánh giá ngắn mạch gây ra kết thúc sớm
toán tử Bitwise
Toán tử bitwise coi toán hạng là chuỗi các chữ số nhị phân và thao tác trên chúng từng chút một. Các toán tử sau được hỗ trợ
Toán tửVí dụÝ nghĩaKết quả
mylist + x
536mylist + x
537bitwise ANDMỗi vị trí bit trong kết quả là AND logic của các bit ở vị trí tương ứng của toán hạng. [mylist + x
287 nếu cả hai đều là mylist + x
287, nếu không thì là mylist + x
207. ]mylist + x
541mylist + x
542bitwise ORMỗi vị trí bit trong kết quả là OR logic của các bit ở vị trí tương ứng của toán hạng. [mylist + x
287 nếu một trong hai là mylist + x
287, ngược lại là mylist + x
207. ]mylist + x
546mylist + x
547 phủ định theo bit Mỗi vị trí bit trong kết quả là phủ định logic của bit ở vị trí tương ứng của toán hạng. [________ 5287 của ________ 5207, ________ 5207 nếu ________ 5287. ]mylist + x
552mylist + x
553bitwise XOR [độc quyền OR]Mỗi vị trí bit trong kết quả là phép XOR logic của các bit ở vị trí tương ứng của toán hạng. [mylist + x
287 nếu các bit trong toán hạng khác nhau, mylist + x
207 nếu chúng giống nhau. ]mylist + x
556mylist + x
557Shift phải ________ 5558 vị trí Mỗi bit được dịch chuyển sang phải ________ 5558 vị trí. mylist + x
560mylist + x
561 Dịch sang trái ______ 5558 vị trí Mỗi bit được dịch sang trái _______ 5558 vị tríDưới đây là một số ví dụ
>>>
mylist + x
54Ghi chú. Mục đích của
mylist + x
564 là định dạng đầu ra dạng số của các phép toán theo bit, để làm cho chúng dễ đọc hơn. Bạn sẽ thấy phương pháp mylist + x
565 chi tiết hơn sau này. Hiện tại, chỉ cần chú ý đến toán hạng của phép toán bit và kết quảtoán tử nhận dạng
Python cung cấp hai toán tử,
mylist + x
566 và mylist + x
567, xác định xem các toán hạng đã cho có cùng một danh tính hay không — nghĩa là tham chiếu đến cùng một đối tượng. Điều này không giống với đẳng thức, có nghĩa là hai toán hạng tham chiếu đến các đối tượng chứa cùng một dữ liệu nhưng không nhất thiết phải là cùng một đối tượngDưới đây là một ví dụ về hai đối tượng bằng nhau nhưng không giống nhau
>>>
mylist + x
55Ở đây,
mylist + x
532 và mylist + x
559 đều đề cập đến các đối tượng có giá trị là mylist + x
570. Họ đều bình đẳng. Nhưng chúng không tham chiếu cùng một đối tượng, như bạn có thể xác minh>>>
mylist + x
56mylist + x
532 và mylist + x
559 không có cùng một danh tính và mylist + x
573 trả về mylist + x
88Trước đây bạn đã thấy rằng khi bạn thực hiện một phép gán như
mylist + x
575, Python chỉ tạo một tham chiếu thứ hai cho cùng một đối tượng và bạn có thể xác nhận thực tế đó bằng hàm mylist + x
576. Bạn cũng có thể xác nhận nó bằng toán tử mylist + x
566>>>
mylist + x
57Trong trường hợp này, vì
mylist + x
30 và mylist + x
31 tham chiếu đến cùng một đối tượng, nên có lý do là mylist + x
30 và mylist + x
31 cũng sẽ bằng nhauKhông ngạc nhiên, đối lập của
mylist + x
566 là mylist + x
567>>>
mylist + x
58Loại bỏ các quảng cáoưu tiên điều hành
Hãy xem xét biểu thức này
>>>
mylist + x
59Có sự mơ hồ ở đây. Python có nên thực hiện phép cộng
mylist + x
584 trước rồi nhân tổng với mylist + x
585 không? Rõ ràng, vì kết quả là
mylist + x
588, nên Python đã chọn cái sau; . Đây là thủ tục đại số tiêu chuẩn, được tìm thấy phổ biến trong hầu hết các ngôn ngữ lập trìnhTất cả các toán tử mà ngôn ngữ hỗ trợ được gán quyền ưu tiên. Trong một biểu thức, tất cả các toán tử có mức ưu tiên cao nhất được thực hiện trước. Sau khi thu được các kết quả đó, các toán tử có mức độ ưu tiên cao nhất tiếp theo được thực hiện. Vì vậy, nó tiếp tục, cho đến khi biểu thức được đánh giá đầy đủ. Bất kỳ toán tử nào có mức độ ưu tiên như nhau đều được thực hiện theo thứ tự từ trái sang phải
Đây là thứ tự ưu tiên của các toán tử Python mà bạn đã thấy cho đến nay, từ thấp nhất đến cao nhất
OperatorDescriptionlowest precedence
mylist + x
536Boolean ORmylist + x
537Boolean ANDmylist + x
535Boolean NOTmylist + x
83, mylist + x
89, mylist + x
505, mylist + x
511, mylist + x
517, mylist + x
523, mylist + x
566, mylist + x
567comparisons, identitymylist + x
541bitwise ORmylist + x
552bitwise XORmylist + x
536bitwise ANDmylist + x
560, mylist + x
556bit shiftsmylist + x
29, mylist + x
40addition, subtractionmylist + x
47, mylist + x
51, mylist = [10, 20]
new = mylist + [30, 40] # Can only add list to list.
print[new]
40, mylist + x
56multiplication, division, floor division, modulomylist + x
212, mylist + x
213, mylist + x
214unary positive, Toán tử ở đầu bảng có mức ưu tiên thấp nhất và toán tử ở cuối bảng có mức ưu tiên cao nhất. Bất kỳ toán tử nào trong cùng một hàng của bảng đều có quyền ưu tiên như nhau
Rõ ràng tại sao phép nhân được thực hiện đầu tiên trong ví dụ trên. phép nhân có quyền ưu tiên cao hơn phép cộng
Tương tự như vậy, trong ví dụ bên dưới, trước tiên,
mylist + x
216 được nâng lên lũy thừa của mylist + x
217, bằng với mylist + x
218, sau đó các phép nhân được thực hiện theo thứ tự từ trái sang phải [mylist + x
219]>>>
mylist + x
20Quyền ưu tiên của toán tử có thể được ghi đè bằng cách sử dụng dấu ngoặc đơn. Các biểu thức trong ngoặc đơn luôn được thực hiện trước, trước các biểu thức không được đặt trong ngoặc đơn. Vì vậy, những điều sau đây xảy ra
>>>
mylist + x
21>>>
mylist + x
22Trong ví dụ đầu tiên,
mylist + x
584 được tính trước, sau đó kết quả được nhân với mylist + x
585. Trong ví dụ thứ hai, mylist + x
222 được tính trước, sau đó mylist + x
216 được nâng lên lũy thừa đó, sau đó kết quả được nhân với mylist + x
224Không có gì sai khi sử dụng dấu ngoặc đơn một cách tự do, ngay cả khi chúng không cần thiết để thay đổi thứ tự đánh giá. Trên thực tế, nó được coi là một thực hành tốt, bởi vì nó có thể làm cho mã dễ đọc hơn và nó giúp người đọc không phải nhớ lại thứ tự ưu tiên của toán tử từ bộ nhớ. Hãy xem xét những điều sau đây
mylist + x
23Ở đây, dấu ngoặc đơn hoàn toàn không cần thiết, vì các toán tử so sánh có mức độ ưu tiên cao hơn so với
mylist + x
537 và dù sao đi nữa cũng sẽ được thực hiện trước. Nhưng một số người có thể coi mục đích của phiên bản có dấu ngoặc đơn rõ ràng hơn phiên bản không có dấu ngoặc đơn nàymylist + x
24Mặt khác, có lẽ có những người thích cái sau hơn; . Vấn đề là, bạn luôn có thể sử dụng dấu ngoặc đơn nếu bạn cảm thấy nó làm cho mã dễ đọc hơn, ngay cả khi chúng không cần thiết để thay đổi thứ tự đánh giá
Loại bỏ các quảng cáoToán tử gán tăng cường
Bạn đã thấy rằng một dấu bằng duy nhất [______1226] được sử dụng để gán giá trị cho một biến. Tất nhiên, giá trị ở bên phải của phép gán là một biểu thức chứa các biến khác là hoàn toàn khả thi.
>>>
mylist + x
25Trên thực tế, biểu thức ở bên phải của phép gán có thể bao gồm các tham chiếu đến biến đang được gán cho
>>>
mylist + x
26Ví dụ đầu tiên được hiểu là “
mylist + x
30 được gán giá trị hiện tại của mylist + x
30 cộng với mylist + x
229,” tăng giá trị của mylist + x
30 lên một cách hiệu quả là mylist + x
229. Lần đọc thứ hai “mylist + x
31 được gán giá trị hiện tại của mylist + x
31 nhân với mylist + x
216,” làm tăng giá trị của mylist + x
31 gấp ba lần một cách hiệu quảTất nhiên, kiểu gán này chỉ có ý nghĩa nếu biến được đề cập trước đó đã được gán một giá trị.
>>>
mylist + x
27Python hỗ trợ ký hiệu gán tăng tốc tốc ký cho các toán tử số học và bitwise này
ArithmeticBitwise
mylist + x
29_______240
mylist + x
47mylist + x
51mylist + x
56mylist = [10, 20]
new = mylist + [30, 40] # Can only add list to list.
print[new]
40mylist = [10, 20]
new = mylist + [30, 40] # Can only add list to list.
print[new]
44mylist + x
536mylist + x
541mylist + x
552mylist + x
556mylist + x
560Đối với các toán tử này, những điều sau đây là tương đương
mylist + x
28Hãy xem những ví dụ này
Tăng cường
Tiêu chuẩn bài tập
Bài tập
mylist + x
248 tương đương vớimylist + x
249mylist + x
250tương đương vớimylist + x
251mylist + x
252tương đương vớimylist + x
253Phần kết luận
Trong hướng dẫn này, bạn đã tìm hiểu về các toán tử đa dạng mà Python hỗ trợ để kết hợp các đối tượng thành biểu thức
Hầu hết các ví dụ bạn đã thấy cho đến nay chỉ liên quan đến dữ liệu nguyên tử đơn giản, nhưng bạn đã thấy phần giới thiệu ngắn gọn về kiểu dữ liệu chuỗi. Hướng dẫn tiếp theo sẽ khám phá các đối tượng chuỗi chi tiết hơn
Lấy bài kiểm tra. Kiểm tra kiến thức của bạn với bài kiểm tra tương tác “Các toán tử và biểu thức Python” của chúng tôi. Sau khi hoàn thành, bạn sẽ nhận được điểm số để có thể theo dõi quá trình học tập của mình theo thời gian
Lấy bài kiểm tra "
« Biến trong Python
Toán tử và biểu thức trong Python
Chuỗi trong Python »
Đánh dấu là đã hoàn thành
🐍 Thủ thuật Python 💌
Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python
Gửi cho tôi thủ thuật Python »
Giới thiệu về John Sturtz
John là một Pythonista cuồng nhiệt và là thành viên của nhóm hướng dẫn Real Python
» Thông tin thêm về JohnMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là
Đan
Joanna
Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bạn nghĩ sao?
Đánh giá bài viết này
Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?
Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi