必须有一种方法可以使用map()
此:
for inst in list_of_instances:
inst.run()
可以这样做:
map(operator.methodcaller('run'), list_of_instances)
如何使用map()
完成此操作?
for inst in list_of_instances:
inst.some_setting = True
答案 0 :(得分:4)
您可以使用setattr
:
map(lambda inst: setattr(inst, 'some_setting', True), list_of_instances)
或使用列表理解:
[setattr(inst, 'some_setting', True) for inst in list_of_instances]
BTW,我认为简单for
循环优于map
,因为
for
循环更容易阅读。map
,列表推导版本生成临时列表([None, None, None, ..., None]
)答案 1 :(得分:2)
你可以,但这不是一个好主意。
map
旨在仅用于纯(不可变)操作,即返回 new 对象的函数。缺乏itemsetter
函数反映了这一观点。由于您的代码修改了对象,因此您应该使用for
循环。
这很重要,因为在Python 3中,map
doesn't return a list。它返回一个迭代器对象,它根据需要调用你的函数。所以在Python 3下,你的代码根本不会运行。
map
vs for
区别并非Python独有。在JavaScript中,您有map
和forEach
;在Haskell中,您有map
和traverse
。区分这两个根本不同的东西很重要。