Python 不需要返回值时映射
我有一个对象列表,我想更改所有对象属性的值(为相同的值NewValue) 在函数(lambda)不返回任何值的情况下,Python 不需要返回值时映射,python,Python,我有一个对象列表,我想更改所有对象属性的值(为相同的值NewValue) 在函数(lambda)不返回任何值的情况下,map()是否比普通for循环更有效 map ( lambda x: x.attribute = NewValue, li) vs 你的方法行不通。不能在lambda构造中赋值。不能在lambda中赋值,但lambda只是函数的简写形式,因此您可以: def set_it(x): x.attribute = new_value map(set_it, li) 与显而易
map()
是否比普通for循环更有效
map ( lambda x: x.attribute = NewValue, li)
vs
你的方法行不通。不能在
lambda
构造中赋值。不能在lambda
中赋值,但lambda
只是函数的简写形式,因此您可以:
def set_it(x):
x.attribute = new_value
map(set_it, li)
与显而易见的情况相比:
for x in li:
x.attribute = new_value
map
与循环(无论是列表理解还是完整写出)的相比,一般的经验法则是map
如果不调用用Python编写的函数,可能会更快。因此,在这种情况下,map
将变慢。另外,直接的for
循环不会创建然后扔掉一个不需要的中间列表,因此希望map
比平常损失更多。非常有启发性。另外,如果您想知道一种方法是否比另一种方法更有效,请使用。谢谢..答案的第二部分是我想要的,尽管我在问题中的示例非常糟糕:DOh,我不同意:lambda x:setattr(x,'attribute',NewValue)
。
for x in li:
x.attribute = new_value