将函数及其参数附加到列表中而不立即调用该函数

Jus*_*Doe 0 python function

我想做这样的事情:

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 中完成此任务的最简单方法是什么?

kay*_*ya3 5

您可以使用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和呼叫,这两种解决方案会给出不同的结果,第一个可能是你想要的。所以我建议避免使用第二个,除非参数只是常量。