Variablen aus einer anderen Datei importieren?

133

Wie kann ich Variablen von einer Datei in eine andere importieren?

Beispiel: file1Hat die Variablen x1und x2wie werden sie übergeben file2?

Wie kann ich alle Variablen von einer zur anderen importieren ?

Ofek
quelle

Antworten:

145
from file1 import *  

importiert alle Objekte und Methoden in Datei1

ennuikiller
quelle
53
Beachten Sie jedoch, dass Sie dies im Allgemeinen nicht tun sollten .
David Cain
7
Wie David bemerkt, verschmutzt dies den Namespace und kann katastrophale Folgen haben, indem Objekte und Funktionen von anderen Modulen maskiert werden, einschließlich derer in der Standarddistribution
22.
11
Ich habe versucht, es zu tun, aber es scheint, als ob Python die Datei1 nicht finden kann , weil ich diesen Fehler erhalte :ImportError: No module named file1
Hilder Vitor Lima Pereira
4
Hattest du eine __init__.pyDatei? Sehen Sie hier für weitere Details.
J0ANMM
76

Import nach file1innen file2:

Verwenden Sie Folgendes, um alle Variablen aus Datei1 zu importieren, ohne den Namespace von Datei2 zu überfluten.

import file1

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

So importieren Sie alle Variablen von Datei1 in den Namespace von Datei2 (nicht empfohlen):

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

Aus den Dokumenten :

Während es from module import *auf Modulebene gültig ist, ist es normalerweise eine schlechte Idee. Zum einen verliert dies eine wichtige Eigenschaft, die Python sonst hat - Sie können durch eine einfache Suchfunktion in Ihrem bevorzugten Editor wissen, wo jeder Toplevel-Name definiert ist. Sie öffnen sich auch in Zukunft für Probleme, wenn ein Modul zusätzliche Funktionen oder Klassen erweitert.

Ashwini Chaudhary
quelle
1
und wenn ich 1000 Variablen übergeben muss?
Ofek
1
@Ofek Dann einfach benutzen import file1 .
Ashwini Chaudhary
1
Es importiert nicht die Variablen: \
Ofek
6
Es importiert die Variablen, obwohl Sie file1.varXjeder Datei ein Präfix voranstellen müssen.
Zmo
43

Am besten x1 und x2 explizit importieren :

from file1 import x1, x2

Auf diese Weise können Sie unnötige Namespace-Konflikte mit Variablen und Funktionen file1während der Arbeit vermeiden file2.

Aber wenn Sie wirklich wollen, können Sie alle Variablen importieren :

from file1 import * 
Chris Redford
quelle
11

Tatsächlich ist dies nicht dasselbe, um eine Variable zu importieren mit:

from file1 import x1
print(x1)

und

import file1
print(file1.x1)

Obwohl x1 und file1.x1 zum Zeitpunkt des Imports denselben Wert haben, sind sie nicht dieselben Variablen. Rufen Sie beispielsweise eine Funktion in Datei1 auf, die x1 ändert, und versuchen Sie dann, die Variable aus der Hauptdatei zu drucken: Der geänderte Wert wird nicht angezeigt.

Marc Rechté
quelle
5

Marc Antwort ist richtig. Tatsächlich können Sie die Speicheradresse für die Variablen drucken print(hex(id(libvar))und sehen, dass die Adressen unterschiedlich sind.

# 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)))
Lei Z.
quelle
3

script1.py

title="Hello world"

In script2.py verwenden wir die Variable script1

Methode 1:

import script1
print(script1.title)

Methode 2:

from script1 import title
print(title)
Ravi G.
quelle
1

In können PythonSie auf den Inhalt anderer Dateien zugreifen, als wären sie
eine Art Bibliothek, verglichen mit anderen Sprachen wie Java oder anderen oop-Basissprachen. Das ist wirklich cool.

Dadurch können Sie auf den Inhalt der Datei zugreifen oder sie importieren, um sie zu verarbeiten oder etwas damit zu tun. Und das ist der Hauptgrund, warum PythonSprache für Datenwissenschaft und maschinelles Lernen usw. sehr bevorzugt wird.

Und das ist das Bild von project structure Dies

Wo ich auf Variablen zugreife, von .env filewo aus sich die API linksSchlüssel und Secret befinden.

Allgemeine Struktur:

from <File-Name> import *
Imran
quelle
0

first.py:

a=5

second.py:

import first
print(first.a)

Das Ergebnis ist 5.

陳仲 肯
quelle