IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

comment faire en sorte qu'une variable devienne globale?


Sujet :

Python

  1. #21
    Membre expérimenté

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Par défaut
    En tant que débutant je dis peut être des bêtises mais je pense que vous confondez l'utilisation du mot global avec ce qui se fait par ailleurs dans d'autres langages que Python.

    Dans les autres langages, souvent le mot global se met dans la déclaration de la variable et lui assigne ainsi un scope global, accessible de partout.

    Mais en Python, une variable définit dans le module, à la racine (pas dans une fonction ou une classe) est par défaut une variable globale.

    Quand on utilise une variable dans une fonction, celle ci n'existe que le temps d’exécution de la fonction, et n'est pas accessible de l'extérieur de la fonction.
    Le fait d'ajouter le mot global devant votre variable dans le corps de la fonction ne fait rien d'autre qu'indiquer à Python que cette variable fait référence à une variable globale qui devrait donc exister en dehors de la fonction dans le scope global.

    Je ne sais pas si cela aide, c'est ce que j'ai compris en tout cas.

  2. #22
    Membre expérimenté

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Par défaut
    Un petit test très simple :

    Deux fichiers :

    1) fichier_appelant.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    from fichier_importe import c
     
    e = 0
     
    c()
    print(e)
    et

    2) fichier_importe.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    e = 5
     
    def a():
        global e
        print(e)
     
     
    def c():
        global e
        e = input("quelle valeur pour \"e\" ?")
        a()
    Si vous lancez le premier fichier et que vous indiquez une valeur, celle ci est bien la variable globale du module fichier_importe. Donc cela fonctionne.

    Mais attention, une variable globale n'est pas globale dans l'intégralité de l'application, mais uniquement au module (au fichier si vous préférez).
    Ici nous avons donc deux variables globales e :
    1. fichier_importe.e
    2. fichier_appelant.e


    La seule solution que je connais pour qu'un premier module modifie une variable d'un autre module est d'importer ce dernier, ce qui a pour effet de créer un nouveau scope (espace de nommage). Mais ici cela reviendrait à importer un module dans un autre qui est lui même importer dans le premier. Ce n'est pas possible, c'est comme l’œuf et la poule, qui commence en premier ...

    Modifiez un peu le premier fichier par ceci et vous verrez bien que la fonction a modifié la variable globale du module importé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import fichier_importe
     
    e = 0
     
    fichier_importe.c()
     
    print(e)
     
    print(fichier_importe.e)
    Tests réalisés sous l'interpréteur de Pycharm avec python 3.6

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/03/2016, 20h22
  2. Réponses: 4
    Dernier message: 05/11/2010, 09h32
  3. Réponses: 6
    Dernier message: 26/05/2010, 22h17
  4. Réponses: 5
    Dernier message: 16/10/2008, 13h36
  5. Réponses: 3
    Dernier message: 02/08/2007, 17h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo