কম্পিউটার টিউটোরিয়াল

পাইথন ফাংশন হ্যাশেবল কেন এবং কীভাবে?

একটি অবজেক্ট হ্যাশেবল হলে তার হ্যাশ ভ্যালু তার লাইফটাইম ধরে একই থাকে এবং সেটি অন্য অবজেক্টের সাথে তুলনা করা যায় (__hash__() এবং __eq__() মেথড থাকতে হয়)। হ্যাশেবল অবজেক্ট ডিকশনারির কী বা সেটের মেম্বার হিসেবে ব্যবহার করা যায়।

পাইথন ফাংশন হ্যাশেবল কেন?

  • ফাংশন অবজেক্ট ইমিউটেবল (তারা একবার তৈরি হলে তাদের কোড/বডি পরিবর্তন হয় না)।
  • পাইথন সব ফাংশন অবজেক্টের জন্য __hash__() মেথড প্রদান করে।
  • হ্যাশ ভ্যালু সাধারণত অবজেক্টের id() থেকে উদ্ভূত হয়, কিন্তু ল্যাম্বডা ফাংশনের ক্ষেত্রে ভিন্ন হতে পারে।

উদাহরণ

# ল্যাম্বডা ফাংশন
m = lambda x: 1
print(hash(m))      # 1265925722
print(id(m))        # 3074942372 (ভিন্ন)
print(m.__hash__()) # 1265925722

# সাধারণ ফাংশন
def f(): pass
print(type(f))      # 
print(f.__hash__()) # 1265925978
print(hash(f))      # 1265925978

ব্যাখ্যা

  • দুইটি ফাংশন অবজেক্টের হ্যাশ ভ্যালু একই হলে সেগুলো সমান (==)।
  • ফাংশন অবজেক্ট ডিকশনারির কী বা সেটে রাখা যায়।
  • বিল্ট-ইন ইমিউটেবল টাইপ (int, str, tuple) হ্যাশেবল; মিউটেবল (list, dict) হ্যাশেবল নয়।
  1. হ‍্যাশ ফাংশন এবং হ‍্যাশ টেবিল (Hash Functions and Hash Tables)

  2. পাইথন অ্যাসারশন কী এবং কীভাবে কাজ করে?

  3. পাইথন ফাংশন কি অবজেক্ট?

  4. পাইথন ফাংশন থেকে ফাংশন রিটার্ন করা