1

必须有办法做到这一点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
4

2 回答 2

4

您可以使用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])
于 2013-10-15T02:08:14.760 回答
2

你可以,但这不是一个好主意。

map设计为仅适用于纯(不可变)操作,即返回对象的函数。缺少itemsetter功能反映了这种想法。由于您的代码就地修改了对象,因此您应该改用for循环。

这很重要,因为在 Python 3 中,map 不返回 list。它返回一个迭代器对象,它按需调用您的函数。所以在 Python 3 下,你的代码根本不会运行。

mapvs的for区别并不是 Python 独有的。在 JavaScript 中,你mapforEach; 在 Haskell 中,你有maptraverse。区分这两个根本不同的东西很重要。

于 2013-10-15T03:58:50.150 回答