Python では、関数を参照する可能性のある変数に遭遇することがよくあります。変数が関数を指しているかどうかを判断することは、さまざまなプログラミング タスクにとって不可欠です。
isinstance(x, function) を使用して関数を識別しようとすると、「関数」オブジェクトが未定義であるために失敗する可能性があります。代わりに、次のアプローチを検討してください。
callable() 関数は、信頼できるインジケーターとして機能します。次のように使用できます:
<code class="python">callable(obj)</code>
または、__call__ 属性の存在を確認します:
<code class="python">hasattr(obj, '__call__')</code>
types.FunctionTypes と Inspection.isfunction も関数を識別する方法を提供しますが、いくつかの制限があります。特に、Python ではなく C で実装された関数に対しては False を返します。これは、以下に示すように、予期しない結果につながる可能性があります。
<code class="python">>>> isinstance(open, types.FunctionType) False >>> callable(open) True</code>
最も信頼できる方法は、オブジェクトを呼び出すことができるかどうかを確認することです。可能であれば、それは関数とみなされます。これは「ダック タイピング」アプローチとして知られています。
<code class="python">callable(obj)</code>
結論として、callable() 関数と __call__ 属性は、変数が Python の関数を参照しているかどうかを検出する効果的な方法を提供します。非 Python 関数の types.FunctionTypes および Inspection.isfunction に関連する注意事項に注意してください。
以上がPython の変数が関数を表しているかどうかをどのように判断しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。