小编典典

如何检测 Python 变量是否为函数?

all

我有一个变量,x我想知道它是否指向一个函数。

我曾希望我可以做类似的事情:

>>> isinstance(x, function)

但这给了我:

Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: name 'function' is not defined

我选择它的原因是因为

>>> type(x)
<type 'function'>

阅读 205

收藏
2022-03-01

共1个答案

小编典典

如果这是针对 Python 2.x 或 Python
3.2+,您可以使用callable().
它曾经被弃用,但现在已被弃用,因此您可以再次使用它。你可以在这里阅读讨论:http:
//bugs.python.org/issue10518。你可以这样做:

callable(obj)

如果这是针对 Python 3.x 但在 3.2 之前的版本,请检查对象是否具有__call__属性。你可以这样做:

hasattr(obj, '__call__')

经常被建议的types.FunctionTypesinspect.isfunction方法(两者都做完全相同的事情)带有许多警告。它False为非
Python
函数返回。例如,大多数内置函数False都是用
C 而不是 Python 实现的,因此它们返回:

>>> isinstance(open, types.FunctionType)
False
>>> callable(open)
True

所以types.FunctionType可能会给您带来令人惊讶的结果。检查鸭子类型对象属性的正确方法是询问它们是否嘎嘎,而不是查看它们是否适合鸭子大小的容器。

2022-03-01