Python 的內置函數 callable() 用於檢查一個對象是否是可調用的(即能否像函數一樣被調用)。當對象可以被調用時返回 True,否則返回 False。
詳細説明
-
可調用對象類型:
- 函數(包括內置函數、自定義函數)
- 類(調用類會創建實例)
- 實現了
__call__方法的類實例 - 方法(綁定方法和非綁定方法)
- lambda 表達式
-
不可調用對象:
- 數字、字符串等基本數據類型
- 列表、字典等容器類型
- 沒有實現
__call__方法的普通對象實例
-
使用示例:
def my_func(): pass class MyClass: def __call__(self): pass print(callable(my_func)) # True print(callable(MyClass)) # True print(callable(MyClass())) # True print(callable("hello")) # False print(callable([1,2,3])) # False -
注意事項:
- 在 Python 3 中,
callable()對於類方法總是返回True - 該函數不能保證調用一定會成功,只是檢查對象是否具備可調用特性
- 常用於動態調用前檢查對象是否可調用
- 在 Python 3 中,
-
應用場景:
- 反射編程時檢查對象是否可執行
- 插件系統中驗證插件接口
- 動態調用前進行安全檢查
-
底層原理:
- 實際上檢查對象是否實現了
__call__方法 - 對於類,會檢查其元類是否可調用
- 實際上檢查對象是否實現了
-
歷史變化:
- Python 2.x 中某些情況下會返回
False(如舊式類) - Python 3.x 中行為更加一致
- Python 2.x 中某些情況下會返回
這個函數在動態類型檢查和元編程中非常有用,可以幫助開發者編寫更健壯的代碼。