Python 3:如何检查一个对象是否是函数?
我是不是可以理解为,所有的函数(无论是内置的还是自己定义的)都属于同一个类,但这个类好像默认并没有绑定到任何变量上?
我该怎么检查一个对象是否是函数呢?
我想我可以这样做:
def is_function(x):
def tmp()
pass
return type(x) is type(tmp)
不过这样看起来不太整洁,我也不太确定这样做是否完全正确。
4 个回答
3
你可以这样做:
def is_function(x):
import types
return isinstance(x, types.FunctionType) \
or isinstance(x, types.BuiltinFunctionType)
5
我怎么能检查一个对象是不是一个函数呢?
这不就是检查这个对象是否可以被调用吗?
hasattr(object, '__call__')
还有在Python 2.x中也是这样。
callable(object) == True
26
在Python 2中:
callable(fn)
在Python 3中:
isinstance(fn, collections.Callable)
因为Callable是一个抽象基类,这相当于:
hasattr(fn, '__call__')