7

私は物事のリストを持っています。そのうちのいくつかは関数でもあります。関数であれば実行したいです。このために、型チェックを行います。これは通常、str、int、float などの他の型で機能します。しかし、関数の場合はうまくいかないようです:

>>> def f():
...     pass
... 
>>> type(f)
<type 'function'>
>>> if type(f) == function: print 'It is a function!!'
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'function' is not defined
>>>

関数型を確認する方法を知っている人はいますか?

4

4 に答える 4

15

タイプをチェックしないで、アクションをチェックしてください。それが関数であるかどうかは実際には気にしません (たとえば、__call__メソッドを持つクラス インスタンスである可能性があります)。呼び出すことができるかどうかだけを気にします。を使用しますcallable(f)

于 2013-07-12T10:21:51.060 に答える
4

は組み込み型ではないためfunction、 aNameErrorが発生します。何かが関数かどうかを確認したい場合は、次を使用しますhasattr

>>> hasattr(f, '__call__')
True

または、次を使用できますisinstance()

>>> from collections import Callable
>>> isinstance(f, Callable)
True
>>> isinstance(map, Callable)
True
于 2013-07-12T10:21:27.693 に答える
2

collections.Callableを使用できます:

import collections

print isinstance(f, collections.Callable)
于 2013-07-12T10:37:12.827 に答える