map
et filter
sont souvent interchangeables avec la liste compréhensions, mais reduce
n'est pas si facilement troqué comme map
et filter
(et d'ailleurs, dans certains cas, je préfère encore la syntaxe fonctionnelle de toute façon). Cependant, lorsque vous devez travailler sur les arguments eux-mêmes, je dois passer par la gymnastique syntaxique et devoir écrire des fonctions entières pour maintenir la lisibilité. Je vais utiliser map
pour garder le test d'illustration simple, mais gardez à l'esprit que les cas d'utilisation réels peuvent être plus difficiles à exprimer en tant que compréhension de liste.Pouvez-vous appliquer une opération directement aux arguments dans map/reduce/filter?
J'ai trouvé deux façons désordonnées d'y arriver, mais rien que je n'utiliserais réellement.
[afunc(*i) for i in aniter] == map(afunc, *zip(*aniter))
[afunc(*i) for i in aniter] == map(lambda i: apply(afunc, i), aniter)
Existe-t-il un moyen clair et élégant d'exprimer le côté droit de ces expressions?
Joli, j'utilise les outils tout le temps, mais pour une raison que j'ignore, il ne m'était pas venu à l'idée de chercher ça. – kojiro
+1 pour l'excellent lien recettes! Je n'ai jamais remarqué ça – Kos