不需要返回值时映射

Gra*_*ddy 3 python

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

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

map ( lambda x: x.attribute = NewValue, li)
Run Code Online (Sandbox Code Playgroud)

VS

for i in li:
    i.attribute = NewValue
Run Code Online (Sandbox Code Playgroud)

Dun*_*can 5

你不能分配一个lambda,但lambda只是一个功能的简写,所以你可以:

def set_it(x):
    x.attribute = new_value
map(set_it, li)
Run Code Online (Sandbox Code Playgroud)

与明显相比:

for x in li:
    x.attribute = new_value
Run Code Online (Sandbox Code Playgroud)

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