如何在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
回答
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()是一个触发该函数执行并计算返回值的表达式那个功能的