• [^] # Re: Python et formes fonctionnelles

    Posté par . En réponse au message de la puissance de (beep) pour trouver un truc simple en 2 minutes. Évalué à 2.

    Oui, la façon d'accéder à la valeur de la variable au moment de la création du lambda est de le nommer comme paramètre du lambda. Mais tu ne peux pas changer cette variable, car tu n'en as pas la "référence" mais bien la valeur. Puisque tu me demandes de te proposer d'écrire du code : reprends juste mon exemple avec le calcul de la somme dans le lambda. Essaie de nommer "somme" comme paramètre du lambda, et de lui additioner x, avant de rendre x*2 comme résultat du lambda. Tu ne pourras pas le faire, à ma connaissance.

    Je réitère : ce n'est certes pas une closure, avec capture de la variable, mais bien une capture de la valeur au moment de la création du lambda ce qui n'est pas la même chose, et en tous cas bien moins intéressant :

    liste = [ 1, 2, 3 ]
    somme = 5
    l = lambda x, somme=somme : somme
    print map(l, liste)
    somme = 7
    print map(l, liste)

    donnera :

    [5, 5, 5]
    [5, 5, 5]

    alors qu'une closure aurait pu permettre d'obtenir la nouvelle valeur de somme dans le deuxième appel