एक फ़ंक्शन पायथन में एक कॉल करने योग्य वस्तु है, यानी कॉल ऑपरेटर का उपयोग करके कॉल किया जा सकता है। हालाँकि अन्य ऑब्जेक्ट भी __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'>