首页 > 解决方案 > 如何在 Python 中调用作为参数传递的函数

问题描述

是否可以调用在 Python 中作为参数传递的函数?我试过这样做,但它给出了一个错误

代码:

def doStuff():
    print("doing stuff")

def doWork():
    print("doing work")

def call_function(func):
    func()

call_function(doStuff())
call_function(doWork())

错误:

TypeError: 'NoneType' object is not callable

标签: pythonparameter-passing

解决方案


call_function(doStuff())意思是“使用返回的值doStuff作为”的参数call_function。这不是您想要的,您想使用函数doStuff本身作为参数。

要获得所需的效果,请省略作为参数传递的函数的括号:call_function(doStuff)

这里的关键见解是函数本身和函数返回的值之间的区别。函数本身是python中的一个实体,就像字符串或者列表或者字典一样,具有可调用的属性。(也就是说,它有一个__call__方法)当您看到对函数的引用后跟一对匹配的括号,无论是按名称(如 in doStuff())或别名(如 in func())或作为引用(如 in lambda x: x+1()),表达式求值到函数返回的值。这个值是None除非函数的执行遇到了一个return语句,在这种情况下,返回的值只是对 . 后面的表达式求值的结果return。函数返回的值可以是任何合法的 python 实体,包括另一个函数。

所有这些词都需要您考虑并可能进一步进行实验或研究,让我更简单地说这doStuff是一个函数的名称,doStuff()是一个触发该函数执行并计算返回值的表达式那个函数


推荐阅读