Python中有七種可調用對象,可調用對象可使用內置函數callable來檢測
一、用戶自定義的函數:
使用def語句或者lambda表達式創建的函數。
二、內置函數:
使用C語言實現的函數,如len、sum或者time.strftime
三、內置方法:
使用C語言實現的方法,如dict.get()
四、類方法:
在類的定義體中定義的函數
五、類:
在調用類時會運行類的__new__方法創建一個實例,然后運行__init__方法,初始化實例,最后把實例返回給調用方。Python中沒有new運算符,所以調用類相當於調用函數。
六、類的實例:
如果類定義了__call__方法,那么它的實例可以作為函數進行調用。並且__call__方法可以進行自定義重寫。
import random class BingoCage(object): def __init__(self,items): self._items=list(items) random.shuffle(self._items) def pick(self): try: return self._items.pop() except IndexError: raise LookupError('pick from empty BingoCage') def __call__(self): return self.pick()
七、生成器函數:
使用yield關鍵字的函數或方法。調用生成器函數返回的是生成器對象。