偵測變數是否為函數
在 Python 中,決定變數是否代表函數可能會令人困惑。直覺的方法 isinstance(x, function) 由於未定義的“function”引用而失敗。
解決方案1:callable()
對於Python 2.x或3.2 中, callable() 提供了直接且簡單的檢查:
<code class="python">callable(x)</code>
解決方案2:call 屬性(Python 3.x Before 3.2)
在Python 3.2 之前,必須檢查物件的__call__ 屬性:
<code class="python">hasattr(x, '__call__')</code>
類型和檢查的注意事項
當types.FunctionTypes 和檢查時.isfunction 方法存在,它們可能會提供意想不到的結果。非Python 函數(例如許多內建函數)使用以下方法返回False:
<code class="python">import types, inspect isinstance(open, types.FunctionType) # False callable(open) # True</code>
最佳實踐:鴨子類型
而不是依賴isinstance 或檢查,首選方法是檢查物件是否可以被調用,模仿「鴨子類型」原則:
<code class="python">def quacks_like_a_function(x): return callable(x)</code>
以上是Python中如何判斷變數是否代表函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!