Variable non global, qui agit comme une global...
Résolu
MickaToast
Messages postés
162
Statut
Membre
-
MickaToast Messages postés 162 Statut Membre -
MickaToast Messages postés 162 Statut Membre -
Bonsoir!
Voilà mon problème: J'ai codé un bot IRC qui parle et interagit avec les utilisateurs. Maintenant, j'ai regardé tout l'ensemble du code pour commenter peu à peu et je viens de remarquer qu'une variable agissait en tant que variable globale. Voici le code:
Une petite explication... Après 5 secondes du lancement du programme, le bot se connecte via un socket en utilisant la commande JOIN. Maintenant, j'aimerais savoir pourquoi la variable CHANNEL dans la fonction JoinChannel() prend la valeur "#Micka", CHANNEL n'a jamais été déclaré comme global dans mon code..
Merci pour les réponses!
Voilà mon problème: J'ai codé un bot IRC qui parle et interagit avec les utilisateurs. Maintenant, j'ai regardé tout l'ensemble du code pour commenter peu à peu et je viens de remarquer qu'une variable agissait en tant que variable globale. Voici le code:
CHANNEL = "#Micka" def JoinChannel(): s.send(bytes("JOIN %s\r\n" % CHANNEL, "UTF-8")) threading.Timer(5.0, JoinChannel).start()
Une petite explication... Après 5 secondes du lancement du programme, le bot se connecte via un socket en utilisant la commande JOIN. Maintenant, j'aimerais savoir pourquoi la variable CHANNEL dans la fonction JoinChannel() prend la valeur "#Micka", CHANNEL n'a jamais été déclaré comme global dans mon code..
Merci pour les réponses!
A voir également:
- Variable non global, qui agit comme une global...
- Global positioning system - Accueil - Transports & Cartes
- Vba excel sélectionner une plage de cellules variable ✓ - Forum VB / VBA
- L'en-tête du document comporte une information qui n’apparaît pas à l'impression car elle est de couleur blanche. de quelle information s'agit-il ? ✓ - Forum Word
- Www.westernunion/global/fr/gcr.html - Forum Jeux vidéo
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp ✓ - Forum Word
4 réponses
c'est ptet mieux si tu passe le chan à joindre en argument de la fonction, nan ^^ ?
Python est un langage interprété, il prends donc certaines libertés vis à vis de la cohérence de ton code.
En l'occurrence, tu n'as pas de variable CHANNEL déclarée à l'intérieur de ta fonction, donc python vas de la chercher dans le main.
PS: c'est fou, moi aussi je suis sur un bot IRC en C en ce moment ^^
------------------------------------------------------------------------------------
"La peur mène à la colère. La colère mène à la haine. Et la haine ... mène à la souffrance." - Yoda
Python est un langage interprété, il prends donc certaines libertés vis à vis de la cohérence de ton code.
En l'occurrence, tu n'as pas de variable CHANNEL déclarée à l'intérieur de ta fonction, donc python vas de la chercher dans le main.
PS: c'est fou, moi aussi je suis sur un bot IRC en C en ce moment ^^
------------------------------------------------------------------------------------
"La peur mène à la colère. La colère mène à la haine. Et la haine ... mène à la souffrance." - Yoda
Bonjour Sugel,
Ce que je ne comprends pas alors c'est que des fois, python me dit qu'il ne reconnait pas la variable, je dois donc la passer en global pour qu'elle puisse être utilisé dans le main et la fonction...
Ce que je ne comprends pas alors c'est que des fois, python me dit qu'il ne reconnait pas la variable, je dois donc la passer en global pour qu'elle puisse être utilisé dans le main et la fonction...
@MickaToast,
CHANNEL est bien une variable globale et locale dans le sens où tu déclares cette variable dans la partie principale du programme qui a deux dictionnaires, un global et un local.
Tu pourras l'utiliser dans le programme principal et dans tes fonctions du programme.
Par contre tu pourras modifier cette variable que dans la partie principale du programme, non dans une fonction. Dans le cas où tu souhaites le faire il faudra utiliser un mot clé qui est global. Effectivement, comme Sugel le suggère (il pensait certainement à ce mot clé), le mot clé global n'est pas conseillé, c'est très moche dans le sens où les débutant qui l'utilisent font du bricolage avec.
Exemple avec l'écriture d'une variable globale
Maintenant avec le mot clé global
CHANNEL est bien une variable globale et locale dans le sens où tu déclares cette variable dans la partie principale du programme qui a deux dictionnaires, un global et un local.
Tu pourras l'utiliser dans le programme principal et dans tes fonctions du programme.
Par contre tu pourras modifier cette variable que dans la partie principale du programme, non dans une fonction. Dans le cas où tu souhaites le faire il faudra utiliser un mot clé qui est global. Effectivement, comme Sugel le suggère (il pensait certainement à ce mot clé), le mot clé global n'est pas conseillé, c'est très moche dans le sens où les débutant qui l'utilisent font du bricolage avec.
Exemple avec l'écriture d'une variable globale
CHANNEL = None def modify(): CHANNEL = "hello" modify() print(CHANNEL) # None, CHANNEL est pas modifié
Maintenant avec le mot clé global
CHANNEL = None def modify(): global CHANNEL CHANNEL = "hello" modify() print(CHANNEL) # Affichage de hello, CHANNEL est modifié