Değişkenleri başka bir dosyadan mı içe aktarıyorsunuz?


136

Değişkenleri bir dosyadan diğerine nasıl aktarabilirim?

örnek: file1değişkenler var x1ve x2bunları nasıl aktarabilirim file2?

Nasıl alabilirsiniz tüm diğerine değişkenlerin?

Yanıtlar:


147
from file1 import *  

dosya1'deki tüm nesneleri ve yöntemleri içe aktaracak


55
Ancak, bunun genellikle yapmamanız gereken bir şey olduğunu unutmayın .
David Cain

7
David'in belirttiği gibi, bu, ad alanını kirletiyor ve standart dağıtımdakiler de dahil olmak üzere diğer modüllerden nesneleri ve işlevleri maskeleyerek felaket sonuçlara yol açabilir
ennuikiller

11
Bunu yapmaya çalıştım ama bulamıyorum piton gibi görünüyor file1 bu hatayı alıyorum, çünkü:ImportError: No module named file1
Hilder Vitor Lima Pereira

4
Eğer bir var mıydı __init__.pydosyayı? Daha fazla ayrıntı için buraya bakın.
J0ANMM

77

İthalat file1içi file2:

Tüm değişkenleri dosya2 ad alanını taşmadan dosya1'den içe aktarmak için şunu kullanın:

import file1

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

Tüm değişkenleri dosya1'den dosya2 ad alanına aktarmak için (önerilmez):

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

Gönderen docs :

from module import *Modül düzeyinde kullanmak geçerli olsa da, genellikle kötü bir fikirdir. Birincisi, bu, Python'un başka türlü sahip olduğu önemli bir özelliği kaybeder - her bir üst düzey adının, favori düzenleyicinizde basit bir "arama" işlevi tarafından nerede tanımlandığını bilebilirsiniz. Ayrıca, bazı modül ek işlevler veya sınıflar geliştirirse, gelecekte kendinizi sorunlara açarsınız.


1
ve geçirecek 1000 değişkenim varsa?
Ofek

1
@Ofek Sadece import file1 o zaman kullan.
Ashwini Chaudhary

1
Değişkenleri içe
aktarmaz

7
file1.varXher dosyanın başına eklemeniz gerekmesine rağmen değişkenleri içe aktarır .
zmo

43

X1 ve x2'yi açıkça içe aktarmak en iyisi :

from file1 import x1, x2

Bu, file1çalışırken değişkenler ve işlevlerle gereksiz ad alanı çakışmalarını önlemenizi sağlar file2.

Ancak gerçekten istiyorsanız, tüm değişkenleri içe aktarabilirsiniz :

from file1 import * 

11

Aslında bu, bir değişkeni şu şekilde içe aktarmakla aynı değildir:

from file1 import x1
print(x1)

ve

import file1
print(file1.x1)

İçe aktarma zamanında x1 ve dosya1.x1 aynı değere sahip olsalar da, aynı değişkenler değildirler. Örneğin, dosya1'de x1'i değiştiren bir işlevi çağırın ve sonra değişkeni ana dosyadan yazdırmayı deneyin: değiştirilen değeri görmeyeceksiniz.


5

Marc'ın cevabı doğru. Aslında değişkenler için hafıza adresini yazdırabilir print(hex(id(libvar))ve adreslerin farklı olduğunu görebilirsiniz.

# 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 , script1 değişkenini kullandığımız yerdir

Yöntem 1:

import script1
print(script1.title)

Yöntem 2:

from script1 import title
print(title)

1

İçinde Pythondiğer dosyaların içeriğine,
java veya herhangi bir oop temel dili gibi diğer dillere kıyasla bir tür kitaplıkmış gibi erişebilirsiniz. Bu gerçekten harika;

Bu, dosyanın içeriğine erişmeyi veya onu işlemek veya onunla herhangi bir şey yapmak için içe aktarmayı sağlar; PythonVeri Bilimi ve Makine Öğrenimi vb. İçin Dil'in çok tercih edilmesinin ana nedeni budur ;

Ve bu resmi project structure Bu

Ve Gizli anahtarlarının .env filebulunduğu değişkenlere nereden erişiyorum API links.

Genel yapı:

from <File-Name> import *

0

first.py:

a=5

second.py:

import first
print(first.a)

Sonuç 5 olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.