Echange de variables globales entre fichiers programmes
Fermé
NeoPython
-
Modifié le 12 déc. 2020 à 20:44
yg_be Messages postés 23338 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 novembre 2024 - 12 déc. 2020 à 21:38
yg_be Messages postés 23338 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 novembre 2024 - 12 déc. 2020 à 21:38
A voir également:
- Python variable globale plusieurs fichiers
- Renommer plusieurs fichiers - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Citizen code python avis - Accueil - Outils
- Explorateur de fichiers - Guide
- Fusionner plusieurs fichiers excel - Guide
8 réponses
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
11 déc. 2020 à 10:38
11 déc. 2020 à 10:38
Hello Neopython,
Alors, que penses tu de tout ça ?
Alors, que penses tu de tout ça ?
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
8 déc. 2020 à 16:05
8 déc. 2020 à 16:05
Bonjour Neopython,
Normal: la variable globale var_1 dans prog_b.py est globale uniquement dans ce fichier
Donc dans le fichier prog_a, var_1 reste égale à 2, suite à l'appel de Ma_fonction()
Normal: la variable globale var_1 dans prog_b.py est globale uniquement dans ce fichier
Donc dans le fichier prog_a, var_1 reste égale à 2, suite à l'appel de Ma_fonction()
yg_be
Messages postés
23338
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 novembre 2024
Ambassadeur
1 551
8 déc. 2020 à 16:25
8 déc. 2020 à 16:25
bonjour,
en règle générale, il est préférable de ne pas utiliser de variables globales.
si tu insistes pour l'utiliser, je ferais ainsi:
ajouter un module, par exemple glovar.py:
dans les autres modules, importer glovar,
y supprimer les
y remplacer
en règle générale, il est préférable de ne pas utiliser de variables globales.
si tu insistes pour l'utiliser, je ferais ainsi:
ajouter un module, par exemple glovar.py:
var_1=None
dans les autres modules, importer glovar,
y supprimer les
global var_1
y remplacer
var_1par
glovar.var_1
georges97
Messages postés
12536
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
20 novembre 2024
2 407
8 déc. 2020 à 16:27
8 déc. 2020 à 16:27
Bonjour à tous deux,
Rien que pour embêter Phil_1857, que je suis à la trace, j'ai eu la même analyse.
Je pense qu'il faut passer par un fichier, à partir duquel on récupérera la valeur. Mais je ne sais pas comment faire.
A vous les studios.
Rien que pour embêter Phil_1857, que je suis à la trace, j'ai eu la même analyse.
Je pense qu'il faut passer par un fichier, à partir duquel on récupérera la valeur. Mais je ne sais pas comment faire.
A vous les studios.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 8 déc. 2020 à 16:36
Modifié le 8 déc. 2020 à 16:36
Oui, en général, éviter les variables globales si possible, ca peut poser des problèmes
Une solution est la POO, utiliser des classes
A la rigueur une astuce possible:
dans prog_b.py
et dans les 2 modules, on appelle Glob.var_1 (il faut enlever les instructions global ...)
Une solution est la POO, utiliser des classes
A la rigueur une astuce possible:
dans prog_b.py
class Glob(): ''' Global variables ''' var_1 = None
et dans les 2 modules, on appelle Glob.var_1 (il faut enlever les instructions global ...)
georges97
Messages postés
12536
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
20 novembre 2024
2 407
8 déc. 2020 à 16:39
8 déc. 2020 à 16:39
Et mon fichier externe?
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
>
georges97
Messages postés
12536
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
20 novembre 2024
8 déc. 2020 à 16:44
8 déc. 2020 à 16:44
Bah, pas besoin ...
La définition de la classe dans prog_b.py et on utilise Glob.var_1 dans prog_a et prog_b, et ça pète le feu à la béquille
La définition de la classe dans prog_b.py et on utilise Glob.var_1 dans prog_a et prog_b, et ça pète le feu à la béquille
georges97
Messages postés
12536
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
20 novembre 2024
2 407
>
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
Modifié le 8 déc. 2020 à 16:51
Modifié le 8 déc. 2020 à 16:51
Ok, Phil, tu gagnes cette fois-ci. Mais j'aurai ma revanche. J'ai encore appris quelque chose, en fait deux chose puisque je ne connaissais pas cette expression de motard.
Bonne soirée????
Bonne soirée????
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
>
georges97
Messages postés
12536
Date d'inscription
lundi 31 janvier 2011
Statut
Contributeur
Dernière intervention
20 novembre 2024
8 déc. 2020 à 16:53
8 déc. 2020 à 16:53
Bone soirée ! :-) :-)
Bonsoir à tous.
Merci pour vos réponses. J'ai eu une mauvaise expérience avec l'utilisation des Classe/Objet pour transférer des variables, au niveau de la manipulation des adresses de variables à lire ou écrire.
Je vais essayer ce que vous proposez dans les jours qui viennent et je vous tiens au courant des résultats.
Merci pour vos réponses. J'ai eu une mauvaise expérience avec l'utilisation des Classe/Objet pour transférer des variables, au niveau de la manipulation des adresses de variables à lire ou écrire.
Je vais essayer ce que vous proposez dans les jours qui viennent et je vous tiens au courant des résultats.
Finalement me revoilà.
Selon vos conseils j'ai fabriqué ma variable dans prog_b :
Mon prog_a contient une utilisation de ma variable. Il va y avoir des échanges entre prog_a et prog_b
Ci dessous voici le résultat de l'execution de prog_a :
0
4
Retour d'une écriture depuis prog_a vers prog_b : 4
Variable exporté de prog_b vers prog_a : 4
Retour d'une écriture depuis prog_a vers prog_b : 6
Retour d'une écriture depuis prog_a vers prog_b : 8
8
10
Retour d'une écriture depuis prog_a vers prog_b : 10
Tout fonctionne bien, SAUF, si vous regardez bien, le premier affichage donne 0 alors qu'il devrait afficher 2. Et bien entendu, je ne vois pas pourquoi. Merci de bien vouloir participer à mes recherches.
Selon vos conseils j'ai fabriqué ma variable dans prog_b :
def Creation_variables () : var_1 = 2 def Utilisation_variables () : print ("Retour d'une écriture depuis prog_a vers prog_b : " + str(var_1))
Mon prog_a contient une utilisation de ma variable. Il va y avoir des échanges entre prog_a et prog_b
import prog_b prog_b.Creation_variables() # Nous allons créer une variable ailleurs, avec une valeur = 2 global var_1 # la variable est déclarée ici comme globale prog_b.var_1 = int() # Apparement on doit déclarer cette variable globale sinon défaut print(prog_b.var_1) # Ce qui permet de pouvoir lire la valeur initiale prog_b.var_1 = 4 # Cette variable va retourner dans prog_b print(prog_b.var_1) prog_b.Utilisation_variables () print("Variable exporté de prog_b vers prog_a : " + str(prog_b.var_1)) # a partir d'ici on écrit à volonté dans prog_b prog_b.var_1 = 6 prog_b.Utilisation_variables () prog_b.var_1 = 8 prog_b.Utilisation_variables () # A partir d'ici on lit à volonté print(prog_b.var_1) prog_b.var_1 = 10 print(prog_b.var_1) prog_b.Utilisation_variables ()
Ci dessous voici le résultat de l'execution de prog_a :
0
4
Retour d'une écriture depuis prog_a vers prog_b : 4
Variable exporté de prog_b vers prog_a : 4
Retour d'une écriture depuis prog_a vers prog_b : 6
Retour d'une écriture depuis prog_a vers prog_b : 8
8
10
Retour d'une écriture depuis prog_a vers prog_b : 10
Tout fonctionne bien, SAUF, si vous regardez bien, le premier affichage donne 0 alors qu'il devrait afficher 2. Et bien entendu, je ne vois pas pourquoi. Merci de bien vouloir participer à mes recherches.
yg_be
Messages postés
23338
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 novembre 2024
1 551
9 déc. 2020 à 20:23
9 déc. 2020 à 20:23
peux-tu préciser "python" quand tu utilises les balises de code?
qui t'a conseillé ceci?
qui t'a conseillé ceci?
global var_1 # la variable est déclarée ici comme globale prog_b.var_1 = int() # Apparement on doit déclarer cette variable globale sinon défaut
NeoPython
>
yg_be
Messages postés
23338
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 novembre 2024
12 déc. 2020 à 20:34
12 déc. 2020 à 20:34
Bonsoir.
C'est moi. J'ai remarqué que je supprimais une alarme avec cette ligne.
Mais je crois comprendre aujourd'hui que c'était une idée stupide.
C'est moi. J'ai remarqué que je supprimais une alarme avec cette ligne.
Mais je crois comprendre aujourd'hui que c'était une idée stupide.
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 9 déc. 2020 à 20:38
Modifié le 9 déc. 2020 à 20:38
Bonsoir,
Tu n'as pas fait comme je te le disais: avec la classe Glob
Le code est court et ça marche:
prog_b.py
prog_a.py
Tu n'as pas fait comme je te le disais: avec la classe Glob
Le code est court et ça marche:
prog_b.py
class Glob(): ''' Global variables ''' var_1 = None def Ma_fonction_externe (): Glob.var_1 = 3
prog_a.py
from prog_b import * def Ma_fonction (): Glob.var_1 = 2 Glob.var_1 = 1 print (Glob.var_1) # affiche 1 OK Ma_fonction () print (Glob.var_1) # affiche 2 OK Ma_fonction_externe () print (Glob.var_1) # affiche 3 !
yg_be
Messages postés
23338
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 novembre 2024
1 551
>
NeoPython
12 déc. 2020 à 21:38
12 déc. 2020 à 21:38
peux-tu alors marquer la discussion comme résolue?
12 déc. 2020 à 20:08
Je viens d'essayer, cela fonctionne très bien, je suis même épaté par la simplicité de la solution.
Merci beaucoup, j'ai une solution à mon problème, cependant avant de clôturer cette question, et parce que je n'aime pas laisser derrière moi un mystère, quelqu'un peut il me dire ce qui clochait dans mon programme (le résultat 0 au lieu de 2).
Simple curiosité technique.