python 3:如何检查对象是否是函数?

时间:2010-11-17 07:23:42

标签: python class function python-3.x

我是否正确假设所有函数(内置或用户定义)都属于同一个类,但默认情况下该类似乎没有绑定到任何变量?

如何检查对象是否为函数?

我猜这可以做到:

def is_function(x):
  def tmp()
    pass
  return type(x) is type(tmp)

它似乎并不整洁,我甚至不能100%确定它是完全正确的。

4 个答案:

答案 0 :(得分:14)

在python2中:

callable(fn)

在python3中:

isinstance(fn, collections.Callable)

因为Callable是一个抽象基类,这相当于:

hasattr(fn, '__call__')

答案 1 :(得分:4)

  

如何检查对象是否为函数?

与检查callables不一样

hasattr(object, '__call__')

以及python 2.x

callable(object) == True

答案 2 :(得分:1)

你可以这样做:

def is_function(x):
    import types
    return isinstance(x, types.FunctionType) \
        or isinstance(x, types.BuiltinFunctionType)

答案 3 :(得分:-2)

try:
    magicVariable()
except TypeError as e:
    print( 'was no function' )