Python 3:如何检查一个对象是否是函数?

19 投票
4 回答
13056 浏览
提问于 2025-04-16 07:12

我是不是可以理解为,所有的函数(无论是内置的还是自己定义的)都属于同一个类,但这个类好像默认并没有绑定到任何变量上?

我该怎么检查一个对象是否是函数呢?

我想我可以这样做:

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__')

撰写回答