必须有办法做到这一点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
您可以使用setattr:
map(lambda inst: setattr(inst, 'some_setting', True), list_of_instances)
或使用列表理解:
[setattr(inst, 'some_setting', True) for inst in list_of_instances]
顺便说一句,我认为简单for的循环比map因为
for循环更容易阅读。map, 列表理解版本生成临时列表 ( [None, None, None, ..., None])你可以,但这不是一个好主意。
map设计为仅适用于纯(不可变)操作,即返回新对象的函数。缺少itemsetter功能反映了这种想法。由于您的代码就地修改了对象,因此您应该改用for循环。
这很重要,因为在 Python 3 中,map 不返回 list。它返回一个迭代器对象,它按需调用您的函数。所以在 Python 3 下,你的代码根本不会运行。
mapvs的for区别并不是 Python 独有的。在 JavaScript 中,你map有forEach; 在 Haskell 中,你有map和traverse。区分这两个根本不同的东西很重要。