Hàm hash() trong Python
Trong Python, hàm hash() sẽ trả về giá trị hash của đối tượng nếu có. Hàm hash (băm) nói chung lấy đầu vào là nội dung bất kỳ sau đó sử dụng các thuật toán để tạo ra đầu ra có độ dài cụ thể.
Bài viết này chúng ta sẽ tìm hiểu hàm hash(), cú pháp và cách sử dụng hàm hash() trong Python.
Cú pháp của hàm hash() trong Python:
hash(đối tượng)
Tham số hash()
Hàm hash() lấy một tham số duy nhất:
- Đối tượng: Là bất cứ thứ gì cần lấy giá trị hash (số nguyên, chuỗi, số thực...)
Giá trị trả về từ hàm hash()
Hàm hash() trả về giá trị hash của đối tượng (nếu có).
Nếu đối tượng có hàm __hash__() tùy chỉnh, hàm hash() sẽ cắt giá trị trả về thành kích thước Py_ssize_t.

Hàm hash() trong Python hoạt động như thế nào?
Ví dụ 1. Cách hash() hoạt động trong Python
#hash cho số nguyên không thay đổi
print('Hash của 181 là:', hash (181))
#hash cho số thập phân
print('Hash cho 181.23 là:',hash(181.23))
#hash cho chuỗi
print('Hash cho Quantrimang.com là:', hash('Quantrimang.com'))
Khi chạy chương trình, kết quả trả về là:
Hash của 181 là: 181
Hash cho 181.23 là: 530343892119126197
Hash cho Quantrimang.com là: 3327670722527760259
Ví dụ 2. hash() cho đối tượng bất biến tuple
Hàm hash() chỉ hoạt động với các đối tượng bất biến giống như tuple. Tuple trong Python là một kiểu dữ liệu dùng để lưu trữ các đối tượng không thay đổi về sau (giống như hằng số).
#tuple của Quantrimang
Quantrimang = ('Q', 'u', 'a', 'n')
print('Hash của Quantrimang là:', hash(Quantrimang))
Khi chạy chương trình, kết quả trả về là:
Hash của Quantrimang là: 4475739666350434463
Hàm hash() xử lý các đối tượng tùy chỉnh như thế nào?
Như đã nói ở trên, hàm hash() gọi một hàm __hash__() nội bộ. Vì vậy, bất kỳ đối tượng nào cũng có thể ghi đè lên __hash__() để có một giá trị hash tùy chỉnh.
Nhưng để triển khai hàm hash chính xác, __hash__() luôn phải trả về kết quả là số nguyên. Và, cả hai hàm __eq__() và __hash__() đều phải được thực hiện.
Dưới đây là các trường hợp áp dụng hash cho các đối tượng tùy chỉnh
Các trường hợp áp dụng hash cho đối tượng tùy chỉnh | ||
__eq_() | __hash__() | Diễn giải |
Xác định (theo mặc định) | Xác định (theo mặc định) | Nếu còn lại, tất cả các đối tượng so sánh không đồng đều với nhau (ngoại trừ chính bản thân chúng) |
(Nếu có thể thay đổi) Xác định | Không được xác định | Quá trình áp dụng bộ sưu tập giá trị có thể hash yêu cầu các giá trị hash của khóa phải bất biến |
Không xác định | Không được xác định | Nếu __eq__() không xác định, __hash__() sẽ không được xác định |
Xác định | Không xác định | Các trường của lớp sẽ không sử dụng được bộ sưu tập giá trị có thể hash. __hash__() sẽ được đặt thành None. Tăng ngoại lệ TypeError nếu cố triển khai lại hàm hash |
Xác định | Kiểm soát bởi lớp cha mẹ | __hash__ = <ParentClass>.__hash__ |
Xác định | Không muốn thực hiện hash | __hash__ = None. Tăng ngoại lệ TypeError nếu cố triển khai lại hàm hash |
Ví dụ 3: hash() cho các đối tượng tùy chỉnh bằng cách ghi đè __hash__()
class Person:
def __init__(self, age, name):
self.age = age
self.name = name
def __eq__(self, other):
return self.age == other.age and self.name == other.name
def __hash__(self):
print('Giá trị hash là:')
return hash((self.age, self.name))
Quantrimang = Person(23, 'Adam')
print(hash(Quantrimang))
Khi chạy chương trình, kết quả trả về là:
Giá trị hash là:
-7852579163592371862
Ghi chú: Bạn không cần thực thi hàm __eq__() cho quá trình hash bởi hàm này được thực thi mặc định cho tất cả các đối tượng.
Bạn nên đọc
-
Hàm round() trong Python
-
Hàm any() trong Python
-
Làm việc với File trong Python
-
Hàm reversed() trong Python
-
Tại sao Python là ngôn ngữ lập trình “phải học” đối với các data scientist trong thời đại 4.0?
-
Hàm map() trong Python
-
Hơn 100 bài tập Python có lời giải (code mẫu)
-
Hàm range() trong Python
-
Những công cụ Python tốt nhất dành cho Machine Learning và Data Science
Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:


Cũ vẫn chất
-
Dynamic System Updates là gì?
Hôm qua -
Cách sửa lỗi không thấy bộ điều hợp mạng trên Windows 10
Hôm qua -
Cách chặn từ khóa và Hashtag trên Twitter
Hôm qua -
Các cách làm, tùy chỉnh trong bài sẽ giúp tăng tốc Windows 10 của bạn "nhanh như gió"
Hôm qua 6 -
Cách sao chép hoặc tạo bản sao toàn bộ trang tính trong Google Sheets
Hôm qua -
Hàm COUNTIFS, cách dùng hàm đếm ô theo nhiều điều kiện trong Excel
Hôm qua -
Valentine đen là gì? Valentine đen là ngày nào?
Hôm qua -
Cách dùng Terabox lưu trữ với 1TB miễn phí
Hôm qua 5 -
4 cách kiểm tra lịch sử giao dịch BIDV trên điện thoại, máy tính
Hôm qua -
Sạc không dây là gì? Nó nhanh hơn hay chậm hơn sạc dây? Danh sách smartphone Android hỗ trợ sạc không dây
Hôm qua