42 votes

La fonction map de Python peut-elle appeler des fonctions membres d'objets ?

Je dois faire quelque chose qui est fonctionnellement équivalent à ceci :

 for foo in foos:
    bar = foo.get_bar()
    # Do something with bar

Mon premier réflexe a été d'utiliser map , mais cela n'a pas fonctionné :

 for bar in map(get_bar, foos):
    # Do something with bar

Ce que j'essaie d'accomplir est-il possible avec map ? Dois-je utiliser une compréhension de liste à la place ? Quel est l'idiome le plus pythonien pour cela ?

9voto

Vous voulezoperator.methodcaller() . Ou, bien sûr, une liste ou un générateur de compréhension.

2voto

AlexD Points 1962

Ce code modifié fonctionnera :

 for bar in map(lambda f: f.get_bar(), foos):
# Do something with bar

Vous fournissez la fonction lambda ici. Fournir simplement get_bar ne fonctionne pas car il n'est accessible que via une instance de classe ( f.get_bar() ), jamais par lui-même.

1voto

Jarek Przygódzki Points 1215

Vous pouvez utiliser lambda

 for bar in map(lambda foo: foo.get_bar(), foos):
    # Do something with bar

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X