不需要返回值时映射

时间:2012-01-30 12:02:36

标签: python

我有一个对象列表,我想更改所有对象的属性值(相同的值-NewValue)。

在这种函数(lambda)没有返回任何值的情况下,map()是否比正常for循环更有效?

map ( lambda x: x.attribute = NewValue, li)

VS

for i in li:
    i.attribute = NewValue

2 个答案:

答案 0 :(得分:5)

您无法在lambda中分配,但lambda只是功能的简写,因此您可以:

def set_it(x):
    x.attribute = new_value
map(set_it, li)

与明显相比:

for x in li:
    x.attribute = new_value

mapfor循环(无论是列表理解还是完整写出)的一般经验法则是,如果map可能会更快,且只有它不会调用用Python编写的函数。因此,在这种情况下,map会更慢。此外,直接for循环不会创建然后丢弃不需要的中间列表,因此预计map会比平常更多地丢失。

答案 1 :(得分:0)

您的方法无效。无法在lambda构造中分配值。