如何检测一个python变量是否是一个函数?

  • 回答 (2)
  • 关注 (0)
  • 查看 (499)

有一个变量,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
Ne_biubiubiu这就是世界结束的方式回答于

如果是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除非您对功能是什么有一个非常具体的想法,否则不要使用。

扫码关注云+社区

领取腾讯云代金券