• [^] # Re: Et pourtant c'est simple

    Posté par . En réponse au journal Quizz Python : esp[èa]ce de nom. Évalué à 5.

    Création de la fonction foo
    => création et affectation de x a partir d'un entier
    => Création de la class bar
    ==> affectation de x à partir de x (qui n'existe pas dans la class bar ...) => erreur

    Pas tout à fait sinon la seconde méthode marcherait pas non plus.

    Création de la fonction foo
    => création et affectation de x a partir d'un entier
    => Création de la class bar
    ==> le bloc crée une variable x donc on retire x de la table
    ==> affectation de x à partir de x => erreur

    Du coup ça fonctionne :

    def foo():
     x = 1
     class bar:
     y = x + 1
     return bar
    foo()

    Du coup ça plante :

    def foo():
     x = 1
     class bar:
     y = x + 1
     x = 1
     return bar
    foo()

    Toutes les variables crées dans un bloque cachent les variables disponibles dès le début du bloque. Ce n'est pas la déclaration d'une variable à partir d'elle même qui pose problème, mais le fait d'utiliser une variable qui sera surchargée dans ce même bloque.

    https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll