Mengimpor variabel dari file lain?

135

Bagaimana saya bisa mengimpor variabel dari satu file ke file lainnya?

contoh: file1memiliki variabel x1dan x2cara meneruskannya file2?

Bagaimana saya bisa mengimpor semua variabel dari satu ke yang lain?

Ofek
sumber

Jawaban:

146
from file1 import *  

akan mengimpor semua objek dan metode dalam file1

ennuikiller
sumber
54
Namun perlu dicatat, ini umumnya sesuatu yang tidak boleh Anda lakukan .
David Cain
7
Seperti dicatat David, ini mencemari namespace dan dapat memiliki konsekuensi bencana dengan menutupi objek dan fungsi dari modul lain termasuk yang ada di distro standar
ennuikiller
11
Saya mencoba melakukannya, tetapi sepertinya python tidak dapat menemukan file1 , karena saya mendapatkan kesalahan ini:ImportError: No module named file1
Hilder Vitor Lima Pereira
4
Apakah Anda punya __init__.pyfile? Lihat di sini untuk detail lebih lanjut.
J0ANMM
76

Impor file1di dalam file2:

Untuk mengimpor semua variabel dari file1 tanpa membanjiri namespace file2, gunakan:

import file1

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

Untuk mengimpor semua variabel dari file1 ke namespace file2 (tidak disarankan):

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

Dari dokumen :

Meskipun valid untuk digunakan from module import *pada level modul, biasanya merupakan ide yang buruk. Untuk satu, ini kehilangan properti penting yang dimiliki Python sebaliknya - Anda bisa tahu di mana setiap nama tingkat atas didefinisikan oleh fungsi "pencarian" sederhana di editor favorit Anda. Anda juga membuka diri terhadap masalah di masa depan, jika beberapa modul mengembangkan fungsi atau kelas tambahan.

Ashwini Chaudhary
sumber
1
dan jika saya memiliki 1000 variabel untuk lulus?
Ofek
1
@Ofek Cukup gunakan saja import file1 .
Ashwini Chaudhary
1
Itu tidak mengimpor variabel: \
Ofek
7
itu mengimpor variabel, meskipun Anda harus menambahkan terlebih dahulu file1.varXuntuk setiap file.
zmo
43

Terbaik untuk mengimpor x1 dan x2 secara eksplisit:

from file1 import x1, x2

Ini memungkinkan Anda untuk menghindari konflik namespace yang tidak perlu dengan variabel dan fungsi file1saat bekerja file2.

Tetapi jika Anda benar-benar ingin, Anda dapat mengimpor semua variabel:

from file1 import * 
Chris Redford
sumber
11

Sebenarnya ini tidak benar-benar sama dengan mengimpor variabel dengan:

from file1 import x1
print(x1)

dan

import file1
print(file1.x1)

Meskipun pada waktu impor x1 dan file1.x1 memiliki nilai yang sama, mereka bukan variabel yang sama. Misalnya, panggil fungsi dalam file1 yang memodifikasi x1 dan kemudian cobalah untuk mencetak variabel dari file utama: Anda tidak akan melihat nilai yang dimodifikasi.

Marc Rechté
sumber
5

Respons Marc benar. Sebenarnya, Anda dapat mencetak alamat memori untuk variabel print(hex(id(libvar))dan Anda dapat melihat alamat yang berbeda.

# 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
sumber
3

script1.py

title="Hello world"

script2.py adalah tempat kita menggunakan variabel script1

Metode 1:

import script1
print(script1.title)

Metode 2:

from script1 import title
print(title)
Ravi G
sumber
1

Di PythonAnda dapat mengakses konten file lain seperti seolah-olah mereka
semacam perpustakaan, dibandingkan dengan bahasa lain seperti java atau bahasa dasar oop, Ini benar-benar keren;

Ini membuat mengakses konten file atau mengimpornya untuk memprosesnya atau melakukan apa pun dengannya; Dan itulah alasan utama mengapa PythonBahasa sangat disukai untuk Ilmu Data dan Pembelajaran Mesin dll;

Dan ini adalah gambar project structure Ini

Di mana saya mengakses variabel dari .env filetempat API linkstombol Rahasia dan berada.

Struktur umum:

from <File-Name> import *
Imran
sumber
0

first.py:

a=5

second.py:

import first
print(first.a)

Hasilnya akan 5.

陳仲 肯
sumber