如何判断变量是否为函数?

11 投票
8 回答
12108 浏览
提问于 2025-04-15 20:30

因为在Python中,函数也是一种值,那么我怎么判断一个变量是不是函数呢?

举个例子:

boda = len   # boda is the length function now
if ?is_var_function(boda)?:
  print "Boda is a function!"
else:
  print "Boda is not a function!"

这里假设有个函数叫?is_var_function(x)?,如果x是可以调用的函数,这个函数就应该返回真;如果不是,就返回假。

8 个回答

9

在Python中,有一个叫做 callable 的函数。

 if callable(boda):
14

你可以使用 inspect.isfunction(object) 来检查一个对象是否是函数。具体可以查看这个链接:docs.python.org

不过,平时写代码的时候最好不要常用这种方法。有时候确实需要用到反射,比如在一个MVC框架中,可能需要加载一个类并检查它的成员。但是通常情况下,你应该返回、传递或者处理那些有相同“接口”的对象。举个例子,不要返回一个可能是整数或者函数的对象——总是返回相同“类型”的对象,这样你的代码才能保持一致性。

18

在其他回答中提到的 callable 这个内置函数并不能完全解决你的问题,因为它不仅会对函数返回 True,还会对一些方法、类,以及那些定义了 __call__ 方法的类实例返回 True。如果你的问题标题和内容有误,而且你只关心某个东西是否可以被调用,而不在乎它是否真的是一个函数,那么可以使用这个内置函数。不过,针对你提出的问题,最好的答案是:导入 Python 标准库中的 inspect 模块,然后使用 inspect.isfunction。虽然还有其他更底层的方法,但使用 inspect 模块的功能来检查代码总是个好主意,这样可以让你的代码更加简洁、清晰、稳健,并且更具未来适应性。

撰写回答