Ale*_*xei 8 python lambda tuples unpack python-3.x
在Python 2中,这段代码没问题:
f = lambda (m, k): m + k
m = [1,2,3,4]
k = [5,6,7,8]
print(map(f, zip(m, k)))
Run Code Online (Sandbox Code Playgroud)
但是在Python 3中发生了以下错误:
f = lambda (m, k): m + k
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
如果我删除lambda表达式中的括号,则会发生另一个错误:
TypeError: <lambda>() missing 1 required positional argument: 'k'
Run Code Online (Sandbox Code Playgroud)
使用元组作为单个lambda参数的方法也适用于Python 3,但它不清楚(难以阅读):
f = lambda args: args[0] + args[1]
Run Code Online (Sandbox Code Playgroud)
如何在Python 3中以正确的方式解压缩值?
您可以在Python 2和Python 3中使用相同的语法,itertools.starmap而不是map为我们解包元组项:
>>> from itertools import starmap
>>> f = lambda m, k: m + k
>>> list(starmap(f, zip(m, k)))
[6, 8, 10, 12]
Run Code Online (Sandbox Code Playgroud)
您可能会发现此解决方案更易于阅读:
lambda mk: (lambda m,k: m + k)(*mk)
Run Code Online (Sandbox Code Playgroud)
此外,我认为解包使得它更加 (1) Pythonic 和 (2) 与手动解包命名函数的元组参数一致,这是PEP 3113在 Python 3 中所需的。
在PEP 3113中讨论了元组拆包的删除.基本上,你不能在Python 3中做到这一点.在标题转换计划下,你会看到这样做的"建议"方式是你的最终代码块:
lambda x_y: x_y[0] + x_y[1]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2867 次 |
| 最近记录: |