web-dev-qa-db-ja.com

別のファイルから変数をインポートしますか?

あるファイルから別のファイルに変数をインポートする方法を教えてください。

例:file1には変数x1x2があり、それらをfile2に渡す方法は?

どのようにしてallある変数を別の変数にインポートできますか?

106
Ofek
from file1 import *  

file1内のすべてのオブジェクトとメソッドをインポートします

112
ennuikiller

file1file2内にインポートします。

File2の名前空間をあふれさせることなくfile1からすべての変数をインポートするには、次のようにします。

import file1

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

File1からfile2の名前空間にすべての変数をインポートするには(推奨しません)

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

のドキュメントから

モジュールレベルでfrom module import *を使用することは有効ですが、通常は悪い考えです。一つには、これはPythonがそうでなければ持っている重要な特性を失います - あなたはそれぞれのトップレベルの名前があなたの大好きなエディタの簡単な“検索”機能によって定義されるところを知ることができます。いくつかのモジュールが追加の関数やクラスを増やした場合、あなたはまた将来トラブルに悩まされることになります。

57

x1x2を明示的にインポートするのがベストです。

from file1 import x1, x2

これにより、file1で作業しながら、file2からの変数および関数との不要な名前空間の競合を回避できます。

しかし、本当に必要な場合は、all変数をインポートすることができます。

from file1 import * 
29
Chris Redford

実際には、これを使って変数をインポートするのと同じではありません。

from file1 import x1
print(x1)

そして

import file1
print(file1.x1)

インポート時のx1とfile1.x1は同じ値ですが、同じ変数ではありません。たとえば、x1を変更する関数をfile1で呼び出してから、メインファイルから変数を出力します。変更された値は表示されません。

2
Marc Rechté

マークは正しいです。実際には、変数のメモリアドレス(print(hex(id(libvar)))を印刷すると、アドレスが異なることがわかります。

# 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)))
0
Lei Z