Gsb*_*l10 3 python lambda list-comprehension
我正在学习python,当我意识到这一点时,我正在摆弄lambda表达式和列表推导:
>>> list(map(lambda x: x*x, [1,2]))
输出>>> 1,4但是
>>> list(map(lambda (x): x*x, [1,2]))
显示指向括号的错误 x
看来lambda表达式的参数列表周围没有括号.(在python 3.x中检查)
我现在想问一下,如果我不能在lambda表达式中的参数周围添加括号,那么我如何使用map和lambda表达式处理元组.例如:
>>> records = [('bob', 35, 'manager'), ('sue', 40, 'developer')]
>>> list(map((lambda (name, age, job): age), records))
Run Code Online (Sandbox Code Playgroud)
此语句显示语法错误,指示name参数前的括号.然后我尝试了一个没有括号的表达式:
>>> list(map((lambda name, age, job: age), records))
但是这个语句也显示一个错误,说lambda表达式需要3个参数,但只提供了1个参数.
我得到map函数从records列表中提取整个记录元组并将其传递给lambda函数,并将lambda function整个元组记录作为参数的 name参数.
我想知道,我如何处理lambda表达式中的元组.另外请告诉我为什么它写在书中(由Mark Lutz学习python)这是有效的吗?是python 2.x. 我是python的新手.提前致谢.
您只能lambda在Python2中使用s 的特殊解包语法.但是,您可以使用它itertools.starmap来完成每个项目的解records压缩,因为它传递给Python3中的引擎下的函数:
import itertools
records = [('bob', 35, 'manager'), ('sue', 40, 'developer')]
print(list(itertools.starmap(lambda name, age, job: age, records)))
Run Code Online (Sandbox Code Playgroud)
输出:
[35, 40]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
726 次 |
| 最近记录: |