একটি ফাংশন পাইথনে একটি কলযোগ্য বস্তু, অর্থাৎ কল অপারেটর ব্যবহার করে কল করা যেতে পারে। তবে অন্যান্য অবজেক্ট __call__method প্রয়োগ করে একটি ফাংশন অনুকরণ করতে পারে।
উদাহরণ
def a(): pass # a() is an example of function print a print type(a)
আউটপুট
C:/Users/TutorialsPoint/~.py <function a at 0x0000000005765C18> <type 'function'>
একটি পদ্ধতি হল ফাংশনের একটি বিশেষ শ্রেণি, যা আবদ্ধ বা আনবাউন্ড হতে পারে।
উদাহরণ
class C: def c(self): pass print C.c # example of unbound method print type(C.c) print C().c # example of bound method print type(C().c) print C.c()
অবশ্যই, যুক্তি হিসাবে পাস না করে একটি আনবাউন্ড পদ্ধতি বলা যাবে না।
আউটপুট
<function a at 0xb741b5a4> <type 'function'> <unbound method C.c> <type 'instancemethod'> <bound method C.c of <__main__.C instance at 0xb71ade0c>> <type 'instancemethod'> Traceback (most recent call last): File "~.py", line 11, in <module> print C.c() TypeError: unbound method c() must be called with C instance as first argument (got nothing instead)
পাইথনে, একটি আবদ্ধ পদ্ধতি, একটি ফাংশন বা একটি কলযোগ্য বস্তুর (এটি এমন একটি বস্তু যা __call__ পদ্ধতি প্রয়োগ করে), বা একটি ক্লাস কনস্ট্রাক্টরের মধ্যে খুব বেশি পার্থক্য নেই। এগুলি দেখতে একই রকম, তাদের শুধু আলাদা নামকরণের রীতি রয়েছে এবং হুডের নীচে থাকলেও তা দেখতে অনেকটাই আলাদা হতে পারে৷
এর মানে হল একটি আবদ্ধ পদ্ধতি একটি ফাংশন হিসাবে ব্যবহার করা যেতে পারে, এটি অনেক ছোট জিনিসের মধ্যে একটি যা পাইথনকে এত শক্তিশালী করে তোলে
>>> d = A().a #this is a bound method of A() >>> d() # this is a function
এর মানে হল যে যদিও len(...) এবং str(...) (str একটি টাইপ কনস্ট্রাক্টর) এর মধ্যে একটি মৌলিক পার্থক্য রয়েছে, আমরা একটু গভীরে না যাওয়া পর্যন্ত আমরা পার্থক্যটি লক্ষ্য করব না:
>>>len <built-in function len> >>> str <type 'str'>