Importer des variables depuis un autre fichier?


135

Comment puis-je importer des variables d'un fichier à un autre?

exemple: file1a les variables x1et x2comment les transmettre file2?

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

Réponses:


146
from file1 import *  

importera tous les objets et méthodes du fichier1


54
Notez, cependant, que vous ne devez généralement pas faire cela .
David Cain

7
Comme le note David, cela pollue l'espace de noms et peut avoir des conséquences catastrophiques en masquant les objets et les fonctions d'autres modules, y compris ceux de la distribution standard
ennuikiller

11
J'ai essayé de le faire, mais il semble que python ne trouve pas le fichier1 , car j'obtiens cette erreur:ImportError: No module named file1
Hilder Vitor Lima Pereira

4
Aviez-vous un __init__.pydossier? Voir ici pour plus de détails.
J0ANMM

76

Importer à l' file1intérieur file2:

Pour importer toutes les variables de file1 sans inonder l'espace de noms de file2, utilisez:

import file1

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

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

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

À partir de la documentation :

Bien qu'il soit valide à 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 que Python a autrement - vous pouvez savoir où chaque nom de niveau supérieur est défini par une simple fonction de «recherche» dans votre éditeur préféré. Vous vous exposez également à des problèmes à l'avenir, si certains modules développent des fonctions ou des classes supplémentaires.


1
et si j'ai 1000 variables à passer?
Ofek

1
@Ofek Utilisez simplement import file1 alors.
Ashwini Chaudhary

1
Il n'importe pas les variables: \
Ofek

7
il importe les variables, mais vous devrez ajouter file1.varXchaque fichier au début .
zmo

43

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

from file1 import x1, x2

Cela vous permet d’éviter les conflits d’espaces de noms inutiles avec les variables et les fonctions file1lorsque vous travaillez dans file2.

Mais si vous le souhaitez vraiment, vous pouvez importer toutes les variables:

from file1 import * 

11

En fait, 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 file1.x1 aient la même valeur, ce ne sont pas les mêmes variables. Par exemple, appelez une fonction dans file1 qui modifie x1 puis essayez d'imprimer la variable à partir du fichier principal: vous ne verrez pas la valeur modifiée.


5

La réponse de Marc est correcte. 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)))

3

script1.py

title="Hello world"

script2.py est l'endroit où nous utilisons la variable script1

Méthode 1:

import script1
print(script1.title)

Méthode 2:

from script1 import title
print(title)

1

Dans Pythonvous pouvez accéder au contenu d'autres fichiers comme s'il s'agissait d'
une sorte de bibliothèque, par rapport à d'autres langages comme java ou n'importe quel langage de base oop, c'est vraiment cool;

Cela permet d'accéder au contenu du fichier ou de l'importer pour le traiter ou d'en faire quoi que ce soit; Et c'est la principale raison pour laquelle le Pythonlangage est hautement préféré pour la science des données et l'apprentissage automatique, etc.

Et c'est l'image de project structure Ce

Où j'accède aux variables d' .env fileoù leAPI links résident les clés et secrètes.

Structure générale:

from <File-Name> import *

0

first.py:

a=5

second.py:

import first
print(first.a)

Le résultat sera 5.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.