Issue
I am trying create a list of lambdas for deferred execution using a list comprehension. The below is a simple example.
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()
The result is
b: some message
b: some message
Whereas the desired result should be
a: some message
b: some message
Where am I going wrong?
Solution
Solution
What you are trying to achieve is defining partial
functions (more generally). You can do this using functools.partial
.
Here's how:
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()
Output:
a: some message
b: some message
Refernces
- Documentation for
functools.partial
.
Answered By - CypherX Answer Checked By - Mildred Charles (PHPFixing Admin)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.