変数が関数であるかどうかの検出
Python では、変数が関数を表しているかどうかを判断するのは複雑な場合があります。直感的なアプローチである isinstance(x, 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>
型と検査に関する警告
while types.FunctionTypes および検査.isfunction メソッドが存在しますが、予期しない結果が生じる可能性があります。多くの組み込み関数などの Python 以外の関数は、次のメソッドを使用して False を返します。
<code class="python">import types, inspect isinstance(open, types.FunctionType) # False callable(open) # True</code>
ベスト プラクティス: ダック タイピング
isinstance や Inspection に依存するのではなく、推奨されるアプローチは、「アヒル型」の原則を模倣して、オブジェクトを呼び出すことができるかどうかを確認することです。
<code class="python">def quacks_like_a_function(x): return callable(x)</code>
以上がPython で変数が関数を表しているかどうかを検出する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。