হ্যাঁ, পাইথনে ফাংশন ফুল অবজেক্ট (First-Class Citizen)। পাইথন def স্টেটমেন্ট বা lambda এক্সপ্রেশন দিয়ে ফাংশন অবজেক্ট তৈরি করে।
ফাংশন অবজেক্টের বৈশিষ্ট্য
def foo():
pass
foo.score = 20 # অ্যাট্রিবিউট অ্যাসাইন
print(type(foo)) #
print(foo.score) # 20
print(type(lambda x: x)) #
ফাংশন অবজেক্ট কী কী করতে পারে?
- ভেরিয়েবলে অ্যাসাইন:
f = my_func - আর্গামেন্ট হিসেবে পাস:
map(my_func, data) - রিটার্ন করা:
return inner_func - ডেটা স্ট্রাকচারে রাখা:
funcs = [f1, f2, f3] - অ্যাট্রিবিউট রাখা:
func.metadata = {...} - নেস্টেড ফাংশন ডিফাইন: ক্লোজার তৈরি
বিল্ট-ইন অ্যাট্রিবিউট
__name__— ফাংশনের নাম__doc__— ডকস্ট্রিং__module__— মডিউল নাম__annotations__— টাইপ হিন্ট__code__— কোড অবজেক্ট (বাইটকোড)__defaults__— ডিফল্ট আর্গামেন্ট ভ্যালু__closure__— ক্লোজার সেল (যদি থাকে)
সেট/গেট অ্যাট্রিবিউট ফাংশন
setattr(foo, 'age', 23) getattr(foo, 'age') # 23