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

发布于 2021-02-02 23:09:29

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

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

>>> isinstance(x, function)

但这给了我:

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

我选择的原因是

>>> type(x)
<type 'function'>
关注者
0
被浏览
82
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    如果这是用于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
    

    检查duck型物体属性的正确方法是询问它们是否发出嘎嘎声,而不是看它们是否适合鸭子大小的容器。types.FunctionType除非你对功能是什么非常明确,否则请不要使用。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看