在不需要返回值时使用map
我有一堆对象的列表,我想把这些对象的某个属性的值都改成一样的(新值-NewValue)。
在这种情况下,使用map()
比普通的for循环更有效吗?这里的函数(也就是lambda)不返回任何值。
map ( lambda x: x.attribute = NewValue, li)
对比一下
for i in li:
i.attribute = NewValue
2 个回答
0
你的方法行不通。在lambda
这个结构里,不能给一个值赋值。
5
在一个 lambda
表达式里你不能进行赋值,但 lambda
其实就是一个函数的简写,所以你可以这样做:
def set_it(x):
x.attribute = new_value
map(set_it, li)
和下面这个明显的写法相比:
for x in li:
x.attribute = new_value
关于 map
和 for
循环(无论是列表推导式还是完整写法)有一个简单的经验法则:如果 map
不调用用 Python 写的函数,它可能会更快。但如果调用了 Python 函数,map
可能会更慢。所以在这种情况下,你可以预期 map
会比较慢。此外,普通的 for
循环不会创建并丢弃一个不需要的中间列表,因此可以预期 map
的表现会更差。