Importowanie zmiennych z innego pliku?

146

Jak mogę importować zmienne z jednego pliku do drugiego?

przykład: file1ma zmienne x1i x2jak je przekazać file2?

Jak mogę zaimportować wszystkie zmienne z jednej do drugiej?

Ofek
źródło

Odpowiedzi:

158
from file1 import *  

zaimportuje wszystkie obiekty i metody z pliku file1

ennuikiller
źródło
61
Pamiętaj jednak, że na ogół jest to coś, czego nie powinieneś robić .
David Cain
9
Jak zauważa David, zanieczyszcza to przestrzeń nazw i może mieć katastrofalne konsekwencje, maskując obiekty i funkcje z innych modułów, w tym tych ze standardowej dystrybucji
ennuikiller.
12
Próbowałem to zrobić, ale wygląda na to, że Python nie może znaleźć pliku file1 , ponieważ pojawia się ten błąd:ImportError: No module named file1
Hilder Vitor Lima Pereira
5
Czy masz __init__.pyplik? Więcej informacji znajdziesz tutaj .
J0ANMM
81

Import file1wewnątrz file2:

Aby zaimportować wszystkie zmienne z pliku1 bez zalewania przestrzeni nazw pliku2, użyj:

import file1

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

Aby zaimportować wszystkie zmienne z pliku1 do przestrzeni nazw pliku2 (niezalecane):

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

Z dokumentów :

Chociaż można go używać from module import *na poziomie modułu, zwykle jest to zły pomysł. Po pierwsze, powoduje to utratę ważnej właściwości, którą Python ma w innym przypadku - możesz wiedzieć, gdzie każda nazwa najwyższego poziomu jest zdefiniowana za pomocą prostej funkcji „wyszukiwania” w Twoim ulubionym edytorze. Narażasz się także na kłopoty w przyszłości, jeśli w jakimś module pojawią się dodatkowe funkcje lub klasy.

Ashwini Chaudhary
źródło
1
a jeśli mam 1000 zmiennych do przekazania?
Ofek
1
@Ofek Po prostu użyj import file1 .
Ashwini Chaudhary
1
Nie importuje zmiennych: \
Ofek
10
importuje zmienne, chociaż będziesz musiał dodać je przed file1.varXkażdym plikiem.
zmo
48

Najlepiej jawnie zaimportować x1 i x2 :

from file1 import x1, x2

Pozwala to uniknąć niepotrzebnych konfliktów przestrzeni nazw ze zmiennymi i funkcjami file1podczas pracy w programie file2.

Ale jeśli naprawdę chcesz, możesz zaimportować wszystkie zmienne:

from file1 import * 
Chris Redford
źródło
13

W rzeczywistości importowanie zmiennej z:

from file1 import x1
print(x1)

i

import file1
print(file1.x1)

Chociaż w czasie importu x1 i plik1.x1 mają tę samą wartość, nie są tymi samymi zmiennymi. Na przykład, wywołaj funkcję w pliku1, która modyfikuje x1, a następnie spróbuj wydrukować zmienną z pliku głównego: nie zobaczysz zmodyfikowanej wartości.

Marc Rechté
źródło
7

skrypt1.py

title="Hello world"

script2.py to miejsce, w którym używamy zmiennej script1

Metoda 1:

import script1
print(script1.title)

Metoda 2:

from script1 import title
print(title)
Ravi G
źródło
6

Odpowiedź Marca jest poprawna. Właściwie możesz wydrukować adres pamięci dla zmiennych print(hex(id(libvar))i możesz zobaczyć, że adresy są różne.

# 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
źródło
1

W Pythonmożna uzyskać dostęp do zawartości innych plików, takich jak jak gdyby
są jakieś biblioteki, w porównaniu do innych języków takich jak Java lub jakichkolwiek języków bazowych oop, to jest naprawdę fajne;

To sprawia, że ​​dostęp do zawartości pliku lub importowanie go w celu przetworzenia lub zrobienia czegokolwiek z nim; I to jest główny powód, dla którego Pythonjest bardzo preferowany język w nauce o danych i uczeniu maszynowym itp .;

A to jest zdjęcie project structure To

Gdzie uzyskuję dostęp do zmiennych z .env filemiejsca, w którym API linksznajdują się klucze tajne i.

Struktura ogólna:

from <File-Name> import *
Imran
źródło
1

first.py:

a=5

second.py:

import first
print(first.a)

Wynik będzie 5.

陳仲 肯
źródło