lambda 参数解包错误
lambda arguments unpack error
在Python2这段代码就可以了:
f = lambda (m, k): m + k
m = [1,2,3,4]
k = [5,6,7,8]
print(map(f, zip(m, k)))
但是在Python3中出现了以下错误:
f = lambda (m, k): m + k
^
SyntaxError: invalid syntax
如果我删除了 lambda 表达式中的括号,则会发生另一个错误:
TypeError: <lambda>() missing 1 required positional argument: 'k'
也可以使用元组作为单个 lambda 参数在 Python 3 中工作,但不清楚(难以阅读):
f = lambda args: args[0] + args[1]
如何在 Python 3 中以正确的方式解压值?
您不能在 Python3 中使用圆括号来解压 lambda 函数中的参数 (PEP 3113),尝试:
f = lambda m, k: m + k
要使其与您的代码一起使用,您应该使用:
lambda mk: mk[0] + mk[1]
在 PEP 3113. Basically, you can't do this in Python 3. Under the headline Transition plan 中讨论了删除元组解包,您会看到 "suggested" 这样做的方法是您的最终代码块:
lambda x_y: x_y[0] + x_y[1]
或者您可以直接使用 sum() 来添加数字而不解包:
f = lambda args: sum(args)
如果您使用 itertools.starmap
而不是 map
来为我们解包元组项,则您可以在 Python 2 和 Python 3 中使用相同的语法:
>>> from itertools import starmap
>>> f = lambda m, k: m + k
>>> list(starmap(f, zip(m, k)))
[6, 8, 10, 12]
只需使用
map(f, m, k)
注意f
可以是
from operator import add
map(add, m, k)
您可能会发现此解决方案更易于阅读:
lambda mk: (lambda m,k: m + k)(*mk)
此外,我认为解包使它更 (1) Pythonic 和 (2) 与 named 的元组参数的手动解包一致PEP 3113.
Python 3 中要求的函数
在Python2这段代码就可以了:
f = lambda (m, k): m + k
m = [1,2,3,4]
k = [5,6,7,8]
print(map(f, zip(m, k)))
但是在Python3中出现了以下错误:
f = lambda (m, k): m + k
^
SyntaxError: invalid syntax
如果我删除了 lambda 表达式中的括号,则会发生另一个错误:
TypeError: <lambda>() missing 1 required positional argument: 'k'
也可以使用元组作为单个 lambda 参数在 Python 3 中工作,但不清楚(难以阅读):
f = lambda args: args[0] + args[1]
如何在 Python 3 中以正确的方式解压值?
您不能在 Python3 中使用圆括号来解压 lambda 函数中的参数 (PEP 3113),尝试:
f = lambda m, k: m + k
要使其与您的代码一起使用,您应该使用:
lambda mk: mk[0] + mk[1]
在 PEP 3113. Basically, you can't do this in Python 3. Under the headline Transition plan 中讨论了删除元组解包,您会看到 "suggested" 这样做的方法是您的最终代码块:
lambda x_y: x_y[0] + x_y[1]
或者您可以直接使用 sum() 来添加数字而不解包:
f = lambda args: sum(args)
如果您使用 itertools.starmap
而不是 map
来为我们解包元组项,则您可以在 Python 2 和 Python 3 中使用相同的语法:
>>> from itertools import starmap
>>> f = lambda m, k: m + k
>>> list(starmap(f, zip(m, k)))
[6, 8, 10, 12]
只需使用
map(f, m, k)
注意f
可以是
from operator import add
map(add, m, k)
您可能会发现此解决方案更易于阅读:
lambda mk: (lambda m,k: m + k)(*mk)
此外,我认为解包使它更 (1) Pythonic 和 (2) 与 named 的元组参数的手动解包一致PEP 3113.
Python 3 中要求的函数