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

python 3: how to check if an object is a function?

本问题已经有最佳答案,请猛点这里访问。

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

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

我想我能做到:

1
2
3
4
def is_function(x):
  def tmp()
    pass
  return type(x) is type(tmp)

它看起来不整洁,我甚至不能百分之百肯定它是完全正确的。


在Python 2:

1
callable(fn)

在Python 3中:

1
isinstance(fn, collections.Callable)

由于Callable是一个抽象基类,因此它相当于:

1
hasattr(fn, '__call__')


How can I check that an object is a function?

这和检查可调用文件不一样吗

1
hasattr(object, '__call__')

也在python 2.x中

1
callable(object) == True


你可以做到:

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


1
2
3
4
try:
    magicVariable()
except TypeError as e:
    print( 'was no function' )