変数 がありx
、それが関数を指しているかどうかを知りたいです。
私は次のようなことができると期待していました:
>>> isinstance(x, function)
しかし、それは私に次のことを与えます:
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'function' is not defined
私がそれを選んだ理由は
>>> type(x)
<type 'function'>
ベストアンサー1
Python 2.xまたはPython 3.2+の場合は、callable()
以前は非推奨でしたが、現在は非推奨ではなくなったため、再び使用できます。ここで議論を読むことができます:翻訳: 翻訳者: python. これは次のように実行できます:
callable(obj)
Python 3.x 用だが 3.2 より前の場合は、オブジェクトに__call__
属性があるかどうかを確認します。これは次のように実行できます。
hasattr(obj, '__call__')
よく提案されるtypes.FunctionTypes
またはinspect.isfunction
アプローチ(どちらも全く同じもの) にはいくつかの注意点があります。PythonFalse
以外の関数に対しては戻り値を返します。組み込み関数たとえば、 は Python ではなく C で実装されているため、 を返しますFalse
。
>>> isinstance(open, types.FunctionType)
False
>>> callable(open)
True
驚くべき結果が得られるかもしれませんtypes.FunctionType
。アヒル型のオブジェクトのプロパティを確認する適切な方法は、アヒルサイズのコンテナに収まるかどうかを確認するのではなく、鳴くかどうかを尋ねることです。