我想做这样的事情:
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
Run Code Online (Sandbox Code Playgroud)
在 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)
Run Code Online (Sandbox Code Playgroud)
或者,只需使用 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()
Run Code Online (Sandbox Code Playgroud)
第二个版本是受到一些微妙的错误,因为参数名称(如a)在创建拉姆达时,他们当拉姆达评估不评估叫-如果这意味着a之间的变化append和呼叫,这两种解决方案会给出不同的结果,第一个可能是你想要的。所以我建议避免使用第二个,除非参数只是常量。