python - 如何在 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()
是一个触发该函数执行并计算返回值的表达式那个函数
推荐阅读
- amazon-dynamodb - Dynamodb GetBatchItem 与查询
- compiler-construction - 转换为巴库斯-瑙尔形式
- xml - Excel 中的 Power Query 出现错误
- excel - 最后 4 个结果的总和形成具有多个条件的列
- javascript - 如何将 webpack 生成的输出文件导入到已经安装了输出文件中的模块的应用程序中?
- python - 有没有办法使用 IMDbPY 提取 IMDb 评论?
- html - 导航栏在轨道上只工作一次
- python - 使用 SimpleITK 进行直方图均衡
- symfony - 如何在没有任何交互的情况下使用“Symfony 学说迁移”执行迁移当前版本?
- c# - 有没有办法通过 HttpClient 或类似的方式通过 tumblr 隐私政策接受页面?