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

    Posté par (site web personnel) . En réponse au journal Quizz Python : esp[èa]ce de nom. Évalué à 3. Dernière modification le 09 mars 2023 à 19:12.

    J'ai répondu un peu trop rapidement ...
    Tu as raison d'ailleurs les dernières versions de python sont plus précises

    Traceback (most recent call last):
     File "/home/chris/dvp/env/t1.py", line 6, in <module>
     foo()
     File "/home/chris/dvp/env/t1.py", line 3, in foo
     class bar:
     File "/home/chris/dvp/env/t1.py", line 4, in bar
    ____x = x + 1
    ________^
    NameError: name 'x' is not defined

    Remarque : les underscores sont la pour respecter la cadrage

    Donc python crée une variable locale et ne va pas rechercher dans les variable "globales" la valeur de x donc la recherche ne se fait que dans la portée "locale"

    Alors que dans y = x + 1
    x fait partie des variables "globales" de la classe bar car cette class a été déclarée à l'intérieur de la fonction et donc cela ne déclenche par d'erreur

    Si en plus on demande au langage python de retourner une classe et pas une instance de classe

    par curiosité :

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

    cela retourne :
    <class 'main.foo.<locals>.bar'>

    Python version 3.11

    PS: désolé pour la présentation, je comprends pas pourquoi les backquotes ne me font pas du beau code en python ...