你如何创建一个 python 的 lambda 列表理解?
How do you create a python list comprehension of lambdas?
我正在尝试使用列表推导创建延迟执行的 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()
结果是
b: some message
b: some message
而期望的结果应该是
a: some message
b: some message
我哪里错了?
解决方案
您要实现的是定义 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()
输出:
a: some message
b: some message
参考资料
functools.partial
的文档。
我正在尝试使用列表推导创建延迟执行的 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()
结果是
b: some message
b: some message
而期望的结果应该是
a: some message
b: some message
我哪里错了?
解决方案
您要实现的是定义 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()
输出:
a: some message
b: some message
参考资料
functools.partial
的文档。