python - 将函数及其参数附加到列表而不立即调用该函数
问题描述
我想做这样的事情:
lst = []
lst.append( func1(a, b, c, d) ) # do NOT execute function here/now
lst.append( func2(e, f) ) # do NOT execute function here/now
lst.append( func3(w, x, y) ) # do NOT execute function here/now
# ... later
for f in lst:
result = f # execute function here/now
在 Python 中完成此任务的最简单方法是什么?
解决方案
您可以使用func(*args)
语法来提供位置参数的元组:
lst = []
lst.append( (func1, a, b, c, d) )
lst.append( (func2, e, f) )
lst.append( (func3, w, x, y) )
for func, *args in lst:
result = func(*args)
或者,只需使用 lambda 保护每个函数调用:
lst = []
lst.append(lambda: func1(a, b, c, d))
lst.append(lambda: func2(e, f))
lst.append(lambda: func3(w, x, y))
for f in lst:
result = f()
第二个版本存在一些细微的错误,因为在a
创建 lambda 时不会评估参数名称(例如 ),而是在调用lambda 时评估它们- 这意味着如果在和调用a
之间发生变化append
,这两个解决方案会给出不同的结果,第一个可能是你想要的。所以我建议避免使用第二个,除非参数只是常量。
推荐阅读
- python - 不能用 range() 也不能用 len() 遍历元素
- python - 创建 matplotlib 图时,第一行 fig,ax=plt.subplots() 的相关性是什么?
- c# - 将下拉列表过滤添加到使用存储过程的网格视图
- c# - 如何使用脚本将垂直滚动添加到画布?
- javascript - 从 nodejs 应用程序获取一个值到另一个 nodejs 应用程序的客户端
- unity3d - FSM AI 控制器包中的 fsm 编辑器中缺少“+”号
- php - 基于变量值的颜色表行
- java - 将所有复选框(选中)项目收集到 Array 或 ArrayList
- java - 如何使用 GUI 将 InteliJ 项目导出到可执行文件
- python-3.x - 连接小鸭 http 服务器失败。确保小鸭服务器正在运行,并且在配置中设置了正确的主机和端口