List comprehensions. En Python ressemble à quelque chose comme:
a = [f(x) for x in bar]
Où f (x) est une fonction et un bar est une séquence.
Vous pouvez définir f (x) en fonction partiellement appliquée avec une construction comme:
def foo(x):
return lambda f: f*x
qui retourne une fonction qui multiplie le paramètre par x. Un exemple trivial de ce type de construction utilisé dans une compréhension de la liste ressemble à:
>>> def foo (x):
... return lambda f: f*x
...
>>> a=[1,2,3]
>>> fn_foo = foo(5)
>>> [fn_foo (y) for y in a]
[5, 10, 15]
Bien que je ne pense pas utiliser ce genre de construction dans tous les cas, mais assez ésotérique. Python n'est pas un vrai langage fonctionnel, donc il a moins de possibilités de faire des astuces avec des fonctions plus élevées que (disons) Haskell. Vous pouvez trouver des applications pour ce type de construction, mais ce n'est pas vraiment que pythonic. Vous pouvez obtenir une transformation simple avec quelque chose comme:
>>> y=5
>>> a=[1,2,3]
>>> [x*y for x in a]
[5, 10, 15]
foo (x, autreVar)? –
Merci, c'est assez bonne syntaxe. –
Mykola: Selon ce que vous voulez, je dirais y = 4; a = [f (x, y) pour x dans bar] ou a = [f (x, y) pour x, y dans zip (bar, baz)]. Voir aussi izip. –