Old*_*ool 4 python lambda list-comprehension deferred-execution
我正在尝试使用列表理解为延迟执行创建一个 lambda 列表。下面是一个简单的例子。
def func_a(message: str) -> None:
print('a: ' + message)
def func_b(message: str) -> None:
print('b: ' + message)
msg = 'some message'
funcs = [func_a, func_b]
funcs_w_args = [lambda : func(msg) for func in funcs]
for func in funcs_w_args:
func()
Run Code Online (Sandbox Code Playgroud)
结果是
b: some message
b: some message
Run Code Online (Sandbox Code Playgroud)
而想要的结果应该是
a: some message
b: some message
Run Code Online (Sandbox Code Playgroud)
我哪里错了?
您想要实现的是定义partial
函数(更一般地)。您可以使用functools.partial
.
就是这样:
from functools import partial
# Your Code
def func_a(message: str) -> None:
print('a: ' + message)
def func_b(message: str) -> None:
print('b: ' + message)
msg = 'some message'
funcs = [func_a, func_b]
# What I changed: a list of partially-defined functions
funcs_w_args = [partial(func, msg) for func in funcs]
# Now call partially defined functions
for func in funcs_w_args:
func()
Run Code Online (Sandbox Code Playgroud)
输出:
a: some message
b: some message
Run Code Online (Sandbox Code Playgroud)