你如何创建一个 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

参考资料