あるファイルから別のファイルに変数をインポートする方法を教えてください。
例:file1
には変数x1
とx2
があり、それらをfile2
に渡す方法は?
どのようにしてallある変数を別の変数にインポートできますか?
from file1 import *
file1内のすべてのオブジェクトとメソッドをインポートします
file1
をfile2
内にインポートします。
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がそうでなければ持っている重要な特性を失います - あなたはそれぞれのトップレベルの名前があなたの大好きなエディタの簡単な“検索”機能によって定義されるところを知ることができます。いくつかのモジュールが追加の関数やクラスを増やした場合、あなたはまた将来トラブルに悩まされることになります。
x1とx2を明示的にインポートするのがベストです。
from file1 import x1, x2
これにより、file1
で作業しながら、file2
からの変数および関数との不要な名前空間の競合を回避できます。
しかし、本当に必要な場合は、all変数をインポートすることができます。
from file1 import *
実際には、これを使って変数をインポートするのと同じではありません。
from file1 import x1
print(x1)
そして
import file1
print(file1.x1)
インポート時のx1とfile1.x1は同じ値ですが、同じ変数ではありません。たとえば、x1を変更する関数をfile1で呼び出してから、メインファイルから変数を出力します。変更された値は表示されません。
マークは正しいです。実際には、変数のメモリアドレス(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)))