• [^] # Re: L'idéal

    Posté par . En réponse au journal Votre langage idéal ?. Évalué à 4.

    Ok donc ça signfie que dans ce cas la fermeture possède une référence vers la portée qui contient i plutôt que vers i directement ? Autrement dit, les environnements des closures de python sont mutables.

    On peut dire ça comme ça. Dans les langages dynamiques comme Python, JavaScript et Ruby les closure gardent un accès à la frame ou elles ont été crée.

    Ce qui est confusant dans l'exemple plus haut c'est que la boucle for ne crée pas sa propre frame, mais si on réécrit un peut l'exemple:

    callbacks = []
    def add_callback(i):
     callbacks.append(lambda: i)
    for i in range(3):
     add_callback(i)
    for c in callbacks:
     print c()
    
    

    Cela marche comme attendu.