Làm thế nào để bạn so sánh ba giá trị trong python?
Có một sự khác biệt tinh tế giữa toán tử nhận dạng Python ( 7) và toán tử đẳng thức ( 8). Mã của bạn có thể chạy tốt khi bạn sử dụng toán tử Python 7 để so sánh các số, cho đến khi nó đột nhiên không hoạt động. Bạn có thể đã nghe ở đâu đó rằng toán tử 7 của Python nhanh hơn toán tử 8 hoặc bạn có thể cảm thấy rằng nó trông giống Pythonic hơn. Tuy nhiên, điều quan trọng cần lưu ý là các toán tử này không hoạt động giống nhau Show
Toán tử 8 so sánh giá trị hoặc đẳng thức của hai đối tượng, trong khi toán tử 7 của Python kiểm tra xem hai biến có trỏ đến cùng một đối tượng trong bộ nhớ hay không. Trong phần lớn các trường hợp, điều này có nghĩa là bạn nên sử dụng các toán tử đẳng thức 8 và 6, trừ khi bạn đang so sánh với 7Trong hướng dẫn này, bạn sẽ học
Trạm dừng Python. Hướng dẫn này là một cách nhanh chóng và thiết thực để tìm thông tin bạn cần, vì vậy bạn sẽ nhanh chóng quay lại dự án của mình Tiền thưởng miễn phí. Nhấp vào đây để nhận Bảng cheat Python và tìm hiểu kiến thức cơ bản về Python 3, như làm việc với các kiểu dữ liệu, từ điển, danh sách và hàm Python So Sánh Danh Tính Với Toán Tử Là và Không Là Toán TửCác toán tử Python 7 và 9 so sánh danh tính của hai đối tượng. Trong CPython, đây là địa chỉ bộ nhớ của họ. Mọi thứ trong Python là một đối tượng và mỗi đối tượng được lưu trữ tại một vị trí bộ nhớ cụ thể. Các toán tử Python 7 và 9 kiểm tra xem hai biến có tham chiếu đến cùng một đối tượng trong bộ nhớ hay khôngGhi chú. Hãy nhớ rằng các đối tượng có cùng giá trị thường được lưu trữ tại các địa chỉ bộ nhớ riêng biệt Bạn có thể sử dụng 5 để kiểm tra danh tính của một đối tượng>>>
Dòng cuối cùng hiển thị địa chỉ bộ nhớ nơi chính chức năng tích hợp sẵn 6 được lưu trữCó một số trường hợp phổ biến khi các đối tượng có cùng giá trị sẽ có cùng id theo mặc định. Ví dụ: các số -5 đến 256 được thực tập trong CPython. Mỗi số được lưu trữ tại một vị trí duy nhất và cố định trong bộ nhớ, giúp tiết kiệm bộ nhớ cho các số nguyên thường được sử dụng Bạn có thể sử dụng 7 để thực hiện các chuỗi để thực hiện. Chức năng này cho phép bạn so sánh địa chỉ bộ nhớ của chúng thay vì so sánh từng chuỗi ký tự>>>
Các biến 8 và 9 ban đầu trỏ đến hai đối tượng khác nhau trong bộ nhớ, như được hiển thị bằng các ID khác nhau của chúng. Khi bạn thực tập chúng, bạn đảm bảo rằng 8 và 9 trỏ đến cùng một đối tượng trong bộ nhớ. Bất kỳ chuỗi mới nào có giá trị 52 bây giờ sẽ được tạo tại một vị trí bộ nhớ mới, nhưng khi bạn thực tập chuỗi mới này, bạn phải đảm bảo rằng nó trỏ đến cùng một địa chỉ bộ nhớ như 52 đầu tiên mà bạn đã thực tậpGhi chú. Mặc dù địa chỉ bộ nhớ của một đối tượng là duy nhất tại bất kỳ thời điểm nào, nhưng nó khác nhau giữa các lần chạy của cùng một mã và phụ thuộc vào phiên bản CPython và máy chạy trên đó Các đối tượng khác được thực hiện theo mặc định là 7, 55, 56 và các chuỗi đơn giản. Hãy nhớ rằng hầu hết thời gian, các đối tượng khác nhau có cùng giá trị sẽ được lưu trữ tại các địa chỉ bộ nhớ riêng biệt. Điều này có nghĩa là bạn không nên sử dụng toán tử Python 7 để so sánh các giá trịLoại bỏ các quảng cáoKhi chỉ một số số nguyên được thực tậpĐằng sau hậu trường, Python thực tập các đối tượng với các giá trị thường được sử dụng (ví dụ: các số nguyên -5 đến 256) để tiết kiệm bộ nhớ. Đoạn mã sau đây cho bạn biết cách chỉ một số số nguyên có địa chỉ bộ nhớ cố định >>>
Ban đầu, 8 và 9 trỏ đến cùng một đối tượng được lưu trong bộ nhớ, nhưng khi các giá trị của chúng nằm ngoài phạm vi của các số nguyên phổ biến (từ -5 đến 256), chúng được lưu trữ tại các địa chỉ bộ nhớ riêng biệtKhi nhiều biến trỏ đến cùng một đối tượngKhi bạn sử dụng toán tử gán ( 30) để biến một biến này bằng biến kia, bạn làm cho các biến này trỏ đến cùng một đối tượng trong bộ nhớ. Điều này có thể dẫn đến hành vi không mong muốn đối với các đối tượng có thể thay đổi>>> 5Điều gì vừa xảy ra? . Chà, ở dòng mà 33, bạn đặt 9 trỏ đến cùng một địa chỉ bộ nhớ như 8, để cả hai biến bây giờ đều trỏ đến cùng một đối tượngNếu bạn xác định các danh sách này độc lập với nhau thì chúng sẽ được lưu trữ ở các địa chỉ bộ nhớ khác nhau và hoạt động độc lập >>> 3Vì giờ đây 8 và 9 đề cập đến các đối tượng khác nhau trong bộ nhớ nên việc thay đổi đối tượng này không ảnh hưởng đến đối tượng kiaSo sánh đẳng thức với Python == và. = Toán tửNhớ lại rằng các đối tượng có cùng giá trị thường được lưu trữ tại các địa chỉ bộ nhớ riêng biệt. Sử dụng toán tử đẳng thức 8 và 6 nếu bạn muốn kiểm tra xem hai đối tượng có cùng giá trị hay không, bất kể chúng được lưu trữ ở đâu trong bộ nhớ. Trong phần lớn các trường hợp, đây là những gì bạn muốn làmKhi sao chép đối tượng bằng nhưng không giống nhauTrong ví dụ bên dưới, bạn đặt 9 là bản sao của 8 (là đối tượng có thể thay đổi, chẳng hạn như danh sách hoặc từ điển). Cả hai biến sẽ có cùng một giá trị, nhưng mỗi biến sẽ được lưu trữ ở một địa chỉ bộ nhớ khác nhau>>> 6 8 và 9 hiện được lưu trữ tại các địa chỉ bộ nhớ khác nhau, do đó, 64 sẽ không còn trả về 55. Tuy nhiên, 66 trả về 55 vì cả hai đối tượng đều có cùng giá trịSo sánh bằng cách bình đẳng hoạt động như thế nàoĐiều kỳ diệu của toán tử đẳng thức 8 xảy ra trong phương thức lớp 0 của đối tượng bên trái dấu 8Ghi chú. Đây là trường hợp trừ khi đối tượng bên phải là lớp con của đối tượng bên trái. Để biết thêm thông tin, hãy kiểm tra tài liệu chính thức Đây là một phương thức lớp ma thuật được gọi bất cứ khi nào một thể hiện của lớp này được so sánh với một đối tượng khác. Nếu phương pháp này không được triển khai, thì theo mặc định, 8 sẽ so sánh địa chỉ bộ nhớ của hai đối tượngNhư một bài tập, hãy tạo một lớp 42 kế thừa từ 43 và triển khai 0 để so sánh xem độ dài của chuỗi này có giống với độ dài của đối tượng kia không 4Bây giờ, một SillyString 52 phải bằng với chuỗi 46 và thậm chí với bất kỳ đối tượng nào khác có cùng độ dài>>> 0Tất nhiên, đây là hành vi ngớ ngẩn đối với một đối tượng hoạt động như một chuỗi, nhưng nó minh họa điều gì sẽ xảy ra khi bạn so sánh hai đối tượng bằng cách sử dụng 8. Toán tử 6 đưa ra phản hồi ngược lại của điều này trừ khi một phương thức lớp 49 cụ thể được triển khaiVí dụ trên cũng cho bạn thấy rõ lý do tại sao nên sử dụng toán tử 7 của Python để so sánh với 7, thay vì toán tử 8. Nó không chỉ nhanh hơn vì nó so sánh các địa chỉ bộ nhớ mà còn an toàn hơn vì nó không phụ thuộc vào logic của bất kỳ phương thức lớp 0 nàoLoại bỏ các quảng cáoSo sánh các toán tử so sánh PythonTheo quy tắc chung, bạn phải luôn sử dụng các toán tử đẳng thức 8 và 6, trừ khi bạn đang so sánh với 7
Các biến có cùng giá trị thường được lưu trữ tại các địa chỉ bộ nhớ riêng biệt. Điều này có nghĩa là bạn nên sử dụng 8 và 6 để so sánh các giá trị của chúng và chỉ sử dụng toán tử 7 và 9 của Python khi bạn muốn kiểm tra xem hai biến có trỏ đến cùng một địa chỉ bộ nhớ hay khôngPhần kết luậnTrong hướng dẫn này, bạn đã học được rằng 8 và 6 so sánh giá trị của hai đối tượng, trong khi toán tử 7 và 9 của Python so sánh xem hai biến có tham chiếu đến cùng một đối tượng trong bộ nhớ hay không. Nếu bạn ghi nhớ sự khác biệt này, thì bạn sẽ có thể ngăn chặn hành vi không mong muốn trong mã của mìnhNếu bạn muốn đọc thêm về thế giới tuyệt vời của việc thực tập đối tượng và toán tử 7 của Python, thì hãy xem Tại sao bạn gần như không bao giờ nên sử dụng “is” trong Python. Bạn cũng có thể xem cách bạn có thể sử dụng 7 để tối ưu hóa việc sử dụng bộ nhớ và thời gian so sánh cho các chuỗi, mặc dù rất có thể Python đã tự động xử lý việc này cho bạn ở hậu trườngBây giờ bạn đã học được những gì các toán tử đẳng thức và danh tính thực hiện bên trong, bạn có thể thử viết các phương thức lớp 0 của riêng mình, các phương thức này xác định cách so sánh các thể hiện của lớp này khi sử dụng toán tử 8. Đi và áp dụng kiến thức mới của bạn về các toán tử so sánh Python nàyĐánh dấu là đã hoàn thành Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. So sánh các đối tượng Python đúng cách. "là" so với "==" 🐍 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ề Joska de Langen Joska là một Ordina Pythoneer viết cho Real Python » Thông tin thêm về JoskaMỗ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à Geir Arne Jaya Joanna Mike 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 Pythonista 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 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 Bạn có thể so sánh ba giá trị trong Python không?Có, tuy nhiên, khi các so sánh được xâu chuỗi, biểu thức chung được đánh giá một lần, khi sử dụng và nó được đánh giá hai lần .
Cái gì được sử dụng để so sánh hai hoặc nhiều giá trị trong Python?Phương thức Python set() và == toán tử để so sánh hai danh sách
.
Làm cách nào để kiểm tra nhiều biến cho bằng nhau đối với một giá trị?Nếu bạn gặp trường hợp ngược lại và bạn có nhiều biến cần kiểm tra dựa trên một giá trị, bạn có thể hoán đổi bên trái và bên phải của toán tử in. So instead of using or operators like this: >>> a, b, c = 3.1415, 'hello', 42 >>> if a == 'hello' or b == 'hello' or c == 'hello': ...
== Là một toán tử so sánh trong Python?Bây giờ chúng ta hãy xem từng Toán tử quan hệ một. 1) Lớn hơn. Toán tử này trả về True nếu toán hạng bên trái lớn hơn toán hạng bên phải.
. Toán tử quan hệ trong Python |