Python的map函数可以调用对象成员函数吗?

Jos*_*ver 33 python

我需要做一些在功能上等同于此的东西:

for foo in foos:
    bar = foo.get_bar()
    # Do something with bar
Run Code Online (Sandbox Code Playgroud)

我的第一直觉是使用map,但这不起作用:

for bar in map(get_bar, foos):
    # Do something with bar
Run Code Online (Sandbox Code Playgroud)

我正在努力实现的目标是什么map?我需要使用列表理解吗?这个Pythonic最常用的成语是什么?

Dan*_* D. 47

要么lambda:

for bar in map(lambda foo: foo.get_bar(), foos):
Run Code Online (Sandbox Code Playgroud)

或者foos:

for bar in map(Foo.get_bar, foos):
Run Code Online (Sandbox Code Playgroud)

或者使用生成器表达式:

import operator
get_bar = operator.methodcaller('get_bar')
for bar in map(get_bar, foos):
Run Code Online (Sandbox Code Playgroud)

  • 另外,`map(Foo.get_bar,foos)`其中`Foo`是`foos`中对象的类. (16认同)
  • 与Pythonic的相反顺序. (10认同)

Ign*_*ams 7

你想要的operator.methodcaller().或者,当然,列表或生成器理解.


nlu*_*igi 5

我认为最干净的方法是for完全放弃-loop并使用列表理解:

bars = [foo.get_bar() for foo in foos]
Run Code Online (Sandbox Code Playgroud)

该答案与其他答案很接近,但不同之处在于该列表实际上是返回的,并且不在后续循环中使用。根据您的操作bars,您可能可以使用列表推导。

我认为map函数的lambdas可读性不强,除了开销map很大。