Hướng dẫn what does __ hash __ do in python? - __ băm __ làm gì trong python?

Tóm tắt: Trong hướng dẫn này, bạn sẽ tìm hiểu về hàm băm python () và cách ghi đè phương thức

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
3 trong một lớp tùy chỉnh.: in this tutorial, you’ll learn about the Python hash() function and how to override the

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
3 method in a custom class.

Giới thiệu về hàm băm Python

Hãy bắt đầu với một ví dụ đơn giản.

Đầu tiên, xác định lớp

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
4 với các thuộc tính

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
5 và

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
6:

class Person: def __init__(self, name, age): self.name = name self.age = age

Code language: Python (python)

Thứ hai, tạo hai trường hợp của lớp

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
4:

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)

Thứ ba, hiển thị các băm của các đối tượng

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
8 và

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
9:

print(hash(p1)) print(hash(p2))

Code language: Python (python)

Output:

110373112736 110373572343

Code language: Python (python)

Hàm

print(hash(p1)) print(hash(p2))

Code language: Python (python)
0 chấp nhận một đối tượng và trả về giá trị băm dưới dạng số nguyên. Khi bạn chuyển một đối tượng cho hàm

print(hash(p1)) print(hash(p2))

Code language: Python (python)
0, Python sẽ thực thi phương thức đặc biệt

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
3 của đối tượng.

Điều đó có nghĩa là khi bạn chuyển đối tượng

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
8 cho hàm

print(hash(p1)) print(hash(p2))

Code language: Python (python)
0:

hash(p1)

Code language: Python (python)

Python sẽ gọi phương thức

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
3 của đối tượng

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
8:

p1.__hash__()

Code language: Python (python)

Theo mặc định,

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
3 sử dụng danh tính đối tượng và

print(hash(p1)) print(hash(p2))

Code language: Python (python)
8 trả về

print(hash(p1)) print(hash(p2))

Code language: Python (python)
9 nếu hai đối tượng giống nhau. Để ghi đè hành vi mặc định này, bạn có thể thực hiện

print(hash(p1)) print(hash(p2))

Code language: Python (python)
8 và

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
3.

Nếu một lớp ghi đè phương thức

print(hash(p1)) print(hash(p2))

Code language: Python (python)
8, các đối tượng của lớp trở nên không thể chối cãi. Điều này có nghĩa là bạn đã giành chiến thắng có thể sử dụng các đối tượng trong một loại ánh xạ. Ví dụ: bạn sẽ không thể sử dụng chúng làm khóa trong từ điển hoặc các phần tử trong một bộ.

Lớp

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
4 sau đây thực hiện phương thức

print(hash(p1)) print(hash(p2))

Code language: Python (python)
8:

class Person: def __init__(self, name, age): self.name = name self.age = age def __eq__(self, other): return isinstance(other, Person) and self.age == other.age

Code language: Python (python)

Nếu bạn cố gắng sử dụng đối tượng

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
4 trong một tập hợp, bạn sẽ gặp lỗi. Ví dụ:

members = { Person('John', 22), Person('Jane', 22) }

Code language: Python (python)

Python có lỗi sau:

TypeError: unhashable type: 'Person'

Code language: Python (python)

Ngoài ra, đối tượng của người bị mất băm vì nếu bạn thực hiện

print(hash(p1)) print(hash(p2))

Code language: Python (python)
8,

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
3 sẽ được đặt thành

110373112736 110373572343

Code language: Python (python)
8. Ví dụ:

hash(Person('John', 22))

Code language: Python (python)

Error:

TypeError: unhashable type: 'Person'

Code language: Python (python)

Để tạo ra lớp

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
4 có thể băm, bạn cũng cần thực hiện phương thức

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
3:

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
1

Bây giờ, bạn có lớp

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
4 hỗ trợ bình đẳng dựa trên

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
6 và có thể băm.

Để làm cho

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
4 hoạt động tốt trong các cấu trúc dữ liệu như từ điển, hàm băm của lớp nên vẫn còn bất biến. Để làm điều đó, bạn có thể tạo thuộc tính

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
6 của thuộc tính

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
4 loại chỉ đọc:

p1 = Person('John', 22) p2 = Person('Jane', 22)

Code language: Python (python)
2

Bản tóm tắt

  • Theo mặc định,

    p1 = Person('John', 22) p2 = Person('Jane', 22)

    Code language: Python (python)
    3 sử dụng ID của các đối tượng và

    print(hash(p1)) print(hash(p2))

    Code language: Python (python)
    8 sử dụng toán tử

    hash(p1)

    Code language: Python (python)
    8 để so sánh.
  • Nếu bạn thực hiện

    print(hash(p1)) print(hash(p2))

    Code language: Python (python)
    8, Python sẽ đặt

    p1 = Person('John', 22) p2 = Person('Jane', 22)

    Code language: Python (python)
    3 thành

    110373112736 110373572343

    Code language: Python (python)
    8 trừ khi bạn thực hiện

    p1 = Person('John', 22) p2 = Person('Jane', 22)

    Code language: Python (python)
    3.

Bạn có thấy hướng dẫn này hữu ích không?

Có nghĩa là gì có thể băm?

Vì vậy, Hashable là một tính năng của các đối tượng Python cho biết liệu đối tượng có giá trị băm hay không. Nếu đối tượng có giá trị băm thì nó có thể được sử dụng làm khóa cho từ điển hoặc làm phần tử trong một tập hợp. Một đối tượng có thể băm nếu nó có giá trị băm không thay đổi trong toàn bộ cuộc sống của nó.a feature of Python objects that tells if the object has a hash value or not. If the object has a hash value then it can be used as a key for a dictionary or as an element in a set. An object is hashable if it has a hash value that does not change during its entire lifetime.

Phương thức __ eq __ trong Python là gì?

Bản tóm tắt. Thực hiện phương thức Python __eq__ để xác định logic bình đẳng để so sánh hai đối tượng bằng toán tử bằng nhau (==)define the equality logic for comparing two objects using the equal operator ( == )

Bảng băm trong Python là gì?

Một bảng băm trong Python sử dụng một mảng làm phương tiện lưu trữ và sử dụng phương pháp băm để tạo một chỉ mục trong đó một phần tử sẽ được tìm kiếm từ hoặc cần được chèn.Nói cách khác, bảng băm trong Python là cấu trúc dữ liệu lưu trữ dữ liệu bằng cách sử dụng một cặp giá trị và khóa.a data structure which stores data by using a pair of values and keys.

Chức năng băm có nghĩa là gì?

Hàm băm là bất kỳ hàm nào có thể được sử dụng để ánh xạ dữ liệu có kích thước tùy ý đến các giá trị kích thước cố định.Các giá trị được trả về bởi hàm băm được gọi là giá trị băm, mã băm, tiêu hóa hoặc băm đơn giản.Các giá trị thường được sử dụng để lập chỉ mục một bảng kích thước cố định được gọi là bảng băm.any function that can be used to map data of arbitrary size to fixed-size values. The values returned by a hash function are called hash values, hash codes, digests, or simply hashes. The values are usually used to index a fixed-size table called a hash table.