Python có thể băm
Là ngôn ngữ lập trình có mục đích chung, Python cung cấp nhiều loại dữ liệu tích hợp sẵn cho các trường hợp sử dụng khác nhau Show Khi bạn học những điều cơ bản này, có lẽ bạn đã gặp phải đề cập đến hashable tại một số điểm nhất định. Ví dụ: bạn có thể thấy rằng các khóa trong Ví dụ khác, có đề cập rằng các phần tử trong Bạn có thể thắc mắc — Hashable chính xác có nghĩa là gì? . Nhiều câu hỏi liên quan có thể được hỏi Trong bài viết này, chúng ta sẽ xem xét một số điểm chính về khả năng băm để bạn có thể tìm hiểu cách giải quyết những câu hỏi này. Cuối cùng, bạn có thể sẽ phát hiện ra rằng những câu hỏi này thực ra không khó chút nào, không giống như những gì bạn có thể nghĩ ban đầu. Đối tượng nào có thể băm được và đối tượng nào không? Trước khi chúng tôi bắt đầu bất kỳ lời giải thích cơ học nào, câu hỏi đầu tiên mà chúng tôi muốn giải quyết là đối tượng nào có thể băm được và đối tượng nào không. Bởi vì chúng ta biết rằng Python yêu cầu rõ ràng rằng các phần tử trong một >>> # Create an empty set object Như trong đoạn mã trên, tôi đã tạo một biến Thử nghiệm mà tôi sẽ thực hiện là thêm mỗi ________ 8 vào ________ 6. Tôi sẽ không sử dụng vòng lặp Như bạn có thể thấy trong đoạn mã trên, đây là tóm tắt nhanh về kết quả của thử nghiệm Trả lời câu hỏi của phần
Nếu bạn hoàn toàn mới lập trình Python, bạn có thể nhận thấy rằng ba loại dữ liệu không thể băm này đều có thể thay đổi về bản chất, trong khi năm loại dữ liệu có thể băm này đều là bất biến Về bản chất, các dữ liệu có thể thay đổi này là các đối tượng có thể thay đổi giá trị sau khi tạo, trong khi giá trị của các đối tượng không thể thay đổi không thể thay đổi sau khi tạo Khả năng thay đổi dữ liệu là một chủ đề độc lập mà tôi đã đề cập trước đây trong bài viết khác của mình Hashable nghĩa là gì? Bây giờ bạn có một số ý tưởng về đối tượng nào có thể băm được và đối tượng nào không, nhưng chính xác thì hàm băm có nghĩa là gì? Trên thực tế, bạn có thể đã nghe nhiều thuật ngữ máy tính tương tự liên quan đến hashable, chẳng hạn như hash value, hashing, hash table và hashmap. Về cốt lõi, chúng chia sẻ cùng một quy trình cơ bản - băm Sơ đồ trên cho bạn thấy quá trình băm chung. Chúng tôi bắt đầu với một số giá trị dữ liệu thô (được gọi là khóa trong hình) Hàm băm, đôi khi được gọi là hàm băm, sẽ thực hiện các tính toán cụ thể và xuất các giá trị băm (được gọi là hàm băm trong hình) cho các giá trị dữ liệu thô Băm và các khái niệm liên quan của nó cần cả một cuốn sách để làm rõ, điều này nằm ngoài phạm vi của bài viết hiện tại. Tuy nhiên, một số khía cạnh quan trọng đã được thảo luận ngắn gọn trong bài viết trước của tôi Ở đây, tôi sẽ chỉ nhấn mạnh một số điểm chính có liên quan đến cuộc thảo luận hiện tại
Python đã triển khai hàm băm tích hợp để tạo ra các giá trị băm cho các đối tượng của nó. Cụ thể, chúng ta có thể truy xuất giá trị băm của một đối tượng bằng cách sử dụng hàm Như được hiển thị ở trên, chúng tôi có thể nhận được các giá trị băm - số nguyên cho các đối tượng_______9 và Tuy nhiên, cả đối tượng Trả lời câu hỏi của phần
Làm cách nào chúng ta có thể tùy chỉnh khả năng băm? Tính linh hoạt của Python với tư cách là ngôn ngữ lập trình đa năng chủ yếu đến từ việc hỗ trợ tạo các lớp tùy chỉnh. Với các lớp của riêng bạn, nhiều dữ liệu và hoạt động liên quan có thể được nhóm theo cách dễ đọc và có ý nghĩa hơn nhiều Điều quan trọng là Python đã phát triển đủ thông minh để làm cho các đối tượng tùy chỉnh của chúng ta có thể băm được theo mặc định trong hầu hết các trường hợp Xem xét ví dụ sau. Chúng tôi đã tạo một lớp tùy chỉnh, Đáng chú ý, chúng tôi đã ghi đè hàm Như được hiển thị trong đoạn mã trên, chúng ta có thể tìm ra giá trị băm cho đối tượng đã tạo Tuy nhiên, điều gì sẽ xảy ra nếu chúng ta muốn thêm nhiều trường hợp Xem đoạn mã sau. Tôi đã tạo một phiên bản Tuy nhiên, khi chúng tôi thêm người này vào đối tượng Bởi vì, theo thiết kế, chúng tôi muốn đối tượng Tôi sẽ chỉ cho bạn mã về cách chúng tôi có thể làm cho lớp tùy chỉnh Trong đoạn mã trên, chúng tôi đã cập nhật lớp tùy chỉnh Trước đây chúng tôi đã đề cập rằng hàm Theo mặc định, các thể hiện của lớp tùy chỉnh được so sánh bằng cách so sánh danh tính của chúng bằng cách sử dụng hàm Với cách triển khai được cập nhật, chúng ta có thể thấy rằng khi chúng ta cố gắng tạo một đối tượng Một điều khác cần lưu ý là khi Python kiểm tra xem các phần tử trong đối tượng Trả lời câu hỏi của phầntùy biến. Để cung cấp các hành vi tùy chỉnh về khả năng băm và bình đẳng, chúng tôi cần triển khai các hàm Phần kết luận Trong bài viết này, chúng ta đã xem xét các khái niệm về hashable/hashability trong Python Cụ thể, bằng cách giải quyết ba câu hỏi quan trọng, tôi hy vọng rằng bạn hiểu rõ hơn về khả năng băm trong Python. Khi có thể áp dụng, bạn có thể triển khai các hành vi khả năng băm phù hợp cho các lớp tùy chỉnh của riêng mình Hashable nghĩa là gì trong Python?Một đối tượng Python có thể băm là bất kỳ đối tượng nào có giá trị băm — một mã định danh số nguyên của đối tượng đó và không bao giờ thay đổi trong suốt thời gian tồn tại của nó. Để kiểm tra xem một đối tượng có thể băm hay không và tìm ra giá trị băm của nó (nếu có thể băm), chúng ta sử dụng hàm hash() trên đối tượng này. in(băm(3. 14))Đầu ra. 322818021289917443.
Python có được đặt Hashable không?dict , list , set vốn dĩ có thể thay đổi và do đó không thể băm được . str , bytes , freezeset và tuple là bất biến và do đó có thể băm.
Kiểu dữ liệu nào trong Python có thể băm được?Các loại dữ liệu có thể băm. int , float , str , tuple và NoneType . Các kiểu dữ liệu không thể sửa đổi. dict , danh sách và thiết lập.
Tại sao danh sách trong Python không thể băm được?Vì danh sách có thể thay đổi, trong khi bộ thì không . Ví dụ: khi bạn lưu trữ hàm băm của một giá trị trong một lệnh, nếu đối tượng thay đổi, giá trị băm được lưu trữ sẽ không tìm ra, vì vậy nó sẽ giữ nguyên. |