有一个变量,x想知道它是否指向一个函数。
本来希望能做到这样的事情:
>>> isinstance(x, function)
但是报错为:
Traceback (most recent call last):
File ""<stdin>"", line 1, in ?
NameError: name 'function' is not defined
>>> type(x)
<type 'function'>
内置命名空间中没有构造函数的内建类型(如函数,生成器,方法)在types模块中。您可以types.FunctionType在isinstance调用中使用。
In [1]: import types
In [2]: types.FunctionType
Out[2]: <type 'function'>
In [3]: def f(): pass
...:
In [4]: isinstance(f, types.FunctionType)
Out[4]: True
In [5]: isinstance(lambda x : None, types.FunctionType)
Out[5]: True
如果是Python 2.x或Python 3.2+,那么也可以使用callable()。它曾经被弃用,但现在不赞成,所以你可以再次使用它。你可以阅读这里的讨论:http : //bugs.python.org/issue10518。你可以这样做:
callable(obj)
如果这是针对Python 3.x,但在3.2之前,请检查该对象是否具有__call__属性。你可以这样做:
hasattr(obj, '__call__')
经常提出的types.FunctionTypes方法是不正确的,因为它没有涵盖你想要通过的许多情况,就像内置的方法:
>>> isinstance(open, types.FunctionType)
False
>>> callable(open)
True
检查鸭型物品的性能的正确方法是询问他们是否嘎嘎,而不是看他们是否适合鸭子大小的容器。types.FunctionType除非您对功能是什么有一个非常具体的想法,否则不要使用。