据我所知,唯一的区别是速度,你必须在如何定义lambda函数方面有点诡计.
例如:
map(lambda x: x + 1, range(4)) == [(lambda x: x + 1)(y) for y in range(4)]
Run Code Online (Sandbox Code Playgroud)
在我看来,第二种方式更像是pythonic,但我不确定为什么.
编辑:
是的我明白在第二个例子中会排除lambda,我只是想尽可能地显示等效代码.
这样做的正确方法是
[y + 1 for y in range(4)]
Run Code Online (Sandbox Code Playgroud)
无需在此构建lambda函数.您的代码将在列表推导的每个迭代中不必要地构建新的函数对象.
也就是说,您可以将任何调用写map()为等效列表理解.如果第一个参数map()是lambda函数,则通常首选列表推导.如果第一个参数map()是函数名称,则两个变量都可以.有些人(包括我)更喜欢,比方说,
map(str, my_list)
Run Code Online (Sandbox Code Playgroud)
而其他人更喜欢
[str(x) for x in my_list]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |