Avec Python 2.72, j'ai voulu utiliser deux variables globales en float entre modules. A ma surprise, ça ne fonctionne pas, alors que pour une liste et un dictionnaire, c'est OK. Curieusement, l'initilisation (ici a_var = 1) est vue correctement des deux modules.
Exemple, le fichier a.py:
Et le fichier b.py:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 a_var = 1 # globale, vraiment? l = [1] # global def mod_var(): global a_var, l print "vu de a, avant: %d, %d" %(a_var, l[0]) a_var = 10 l[0] = 10 print "vu de a, apres: %d, %d" %(a_var, l[0])
Le résultat est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import sys from a import * def mod_var2(): global a_var, l a_var = 20 l[0] = 20 def main(p): global a_var, l print "vu de b, avant mod_var a: %d, %d" %(a_var, l[0]) mod_var() print "vu de b, apres mod_var: %d, %d" %(a_var, l[0]) mod_var2() print "vu de b, apres mod_var2: %d, %d" %(a_var, l[0]) print "fin" # Starts here if __name__ == '__main__': main(sys.argv ) #end main
vu de b, avant mod_var a: 1, 1
vu de a, avant: 1, 1
vu de a, apres: 10, 10
vu de b, apres mod_var: 1, 10
vu de b, apres mod_var2: 20, 20
fin
On voit donc clairement que la variable a_var est une copie dans le module b.py, bien que l'initialisation de a.py s'effectue, ce qui est trompeur!
Partager