English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
تقوم طريقة hash() بإرجاع قيمة هشاشة الكائن (إذا كانت موجودة).
قيمة الهشاشة هي بعض الأعداد الصحيحة التي تستخدم في عملية البحث في القواميس.
في الداخل، تقوم طريقة hash() باستدعاء طريقة __hash__() للكائن، التي تُضبط بشكل افتراضي لأي كائن. سنرى ذلك لاحقًا.
نموذج طريقة hash():
hash(object)
معامل طريقة hash()
الكائن - العدد (العدد، النص، العدد العشري) الذي سيتم العودة به قيمة هشاشته
تقوم طريقة hash() بإرجاع قيمة هشاشة الكائن (إذا كانت موجودة).
إذا كان لديك كائن يحتوي على طريقة __hash__() المخصصة، فإنه سيعود القيمة المقطعة.Py_ssize_tالحجم.
# قيمة هشاشة العدد الصحيح تبقى ثابتة print('هشاشة 181:', hash(181)) # هشاشة العدد العشري print('هشاشة 181.23:', hash(181.23)) # هشاشة النص print('هشاشة Python:', hash('Python'))
عند تشغيل هذا البرنامج، الناتج هو:
هشاشة 181: 181 هشاشة 181.23: 579773580 هشاشة Python: 2101984854
يستخدم طريقة hash() فقط للأجسام غير القابلة للتغيير، مثلtuple.
# مجموعة الأصوات vowels = ('a', 'e', 'i', 'o', 'u') print('هشاشة hash:', hash(vowels))
عند تشغيل هذا البرنامج، الناتج هو:
هشاشة hash(): -695778075465126279
كما ذكرنا سابقًا، يتم استدعاء طريقة __hash__() في طريقة hash(). لذلك، يمكن لأي كائن تغيير __hash __() للحصول على قيمة هشاشة مخصصة.
لكن بالنسبة لتنفيذ الهشاشة الصحيح، يجب أن يعود __ hash __() دائمًا بالعدد الصحيح. و يجب أن يتم تنفيذ __eq __() و __hash __() بشكل متزامن.
هذا هو الحالة الصحيحة لإعادة كتابة __hash__ ().
__eq__ () | __hash__ () | الوصف |
---|---|---|
محدد (افتراضيًا) | محدد (افتراضيًا) | إذا تم الحفاظ على الشكل الأصلي، فإن جميع مقارنات الأ obiet لا تكون متساوية (ما عدا أنفسهم) |
(إذا كانت قابلة للتغيير) تم تعريف | لا يجب تعريف | يحتاج تنفيذ مجموعة قابلة للهشاشة إلى أن تكون قيم المفاتيح غير المتغيرة |
لم يتم تعريف | لا يجب تعريف | لا يجب تعريف __hash__ () إذا لم يتم تعريف __eq__ (). |
محدد | لم يتم تعريف | لا يمكن استخدام أمثلة الفئات في المجموعات القابلة للهشاشة. __hash__ () تم تعيينه تلقائيًالا شيء إذا حاولت استرداد الهشاشة، فسيتم إطلاق استثناء TypeError. |
محدد | توليد من الأب | __hash__ = <ParentClass>.__hash__ |
محدد | غير مبرمج | __hash__ = None إذا حاولت استرداد الهشاشة، فسيتم إطلاق استثناء TypeError. |
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('القيمة هي:') return hash((self.age, self.name)) person = Person(23, 'Adam') print(hash(person))
عند تشغيل هذا البرنامج، الناتج هو:
القيمة هي: 3785419240612877014
النصيحة:لا تحتاج إلى إعادة كتابة __eq__ () للهشاشة، لأنه بشكل افتراضي سيتم إنشاء هشاشة لجميع الأ objetos.