web-dev-qa-db-fra.com

Importer des variables depuis un autre fichier?

Comment importer des variables d'un fichier à un autre?

exemple: file1 a les variables x1 et x2 comment les transmettre à file2?

Comment puis-je importer toutes des variables de l'une à l'autre?

106
Ofek
from file1 import *  

va importer tous les objets et méthodes dans file1

112
ennuikiller

Importer file1 dans file2:

Pour importer toutes les variables de fichier1 sans saturer l'espace de noms de fichier2, utilisez:

import file1

#now use file1.x1, file2.x2, ... to access those variables

Pour importer toutes les variables de file1 dans l'espace de noms de fichier2 (non recommandé):

from file1 import *
#now use x1, x2..

De la docs :

Bien qu'il soit valide d'utiliser from module import * au niveau du module, c'est généralement une mauvaise idée. D'une part, cela perd une propriété importante Python sinon, vous pouvez savoir où chaque nom de niveau supérieur est défini par une simple fonction de "recherche" dans votre éditeur favori. Vous vous exposez également à des problèmes à l'avenir, si certains modules développent des fonctions ou des classes supplémentaires.

57
Ashwini Chaudhary

Il est préférable d’importer x1 et x2 explicitement:

from file1 import x1, x2

Cela vous permet d'éviter des conflits inutiles d'espace de nom avec des variables et des fonctions de file1 lorsque vous travaillez dans file2.

Mais si vous voulez vraiment, vous pouvez importer tout les variables:

from file1 import * 
29
Chris Redford

En réalité, ce n'est pas vraiment la même chose d'importer une variable avec:

from file1 import x1
print(x1)

et

import file1
print(file1.x1)

Bien qu'au moment de l'importation x1 et fichier1.x1 aient la même valeur, ce ne sont pas les mêmes variables. Par exemple, appelez une fonction dans fichier1 qui modifie x1, puis essayez d’imprimer la variable à partir du fichier principal: vous ne verrez pas la valeur modifiée.

2
Marc Rechté

Marc a raison. En fait, vous pouvez imprimer l’adresse mémoire des variables (print (hex (id (libvar)))) et vous pouvez voir que les adresses sont différentes.

# mylib.py
libvar = None
def lib_method():
    global libvar
    print(hex(id(libvar)))

# myapp.py
from mylib import libvar, lib_method
import mylib

lib_method()
print(hex(id(libvar)))
print(hex(id(mylib.libvar)))
0
Lei Z