extern int x;
Cのように Python で外部変数を使用するにはどうすればよいですか?
例えば、
main1.py:
from myfunc import print_a
a = 10
print a
print_a()
myfunc.py:
def print_a():
global a
print a
モジュールで変数を再割り当てするだけです。
import myfunc
from myfunc import print_a
a = 10
print a
myfunc.a = a
print_a()
そうでなければ、それは不可能です。
import
Pythonは C とはまったく異なる方法でモジュールを扱うことを思い出してください。Python では、ファイルの「内容をその場所にコピー」するのではなく、指定されたファイルのコードを実行module
してオブジェクトを作成します。
モジュールのグローバル変数はmodule
オブジェクト属性であり、これまでに示したように変更できます。組み込みを除いて、「グローバル変数」という概念はありません。
このグローバル変数をまったく変更する必要がないようにコードをリファクタリングして、を使用するコードをmyfunc.a
from からmain1
に移動することをお勧めしますmyfunc
。このようなグローバル変数が必要であるという事実は、コードに何か問題があり、それを修正する必要があるというコードの匂いです。
実際には、「グローバル スコープ」に影響を与える方法がありますが、あまりにもハックなので、言及したくありません。私を信じてください:あなたはそれを使いたくありません. このようなハッキングを使用したコードを誰かが見た場合、身体的な危険にさらされる可能性があります。
C とは異なり、グローバル スコープで宣言された変数のスコープは、それらが作成されたモジュールに制限されているため、変数が存在するa
モジュールで名前を修飾する必要があります。
このキーワードは、再割り当てによってグローバル変数を変更するglobal
ときに使用されます。グローバル変数を参照するだけの場合は必要ありません。
別のファイルの変数にアクセスしようとしている場合は、そのモジュールをインポートする必要があります。ファイルが構造化されているため、問題を解決するにはいくつかの方法があります。
オプション 1)myfunc.print_a
関数内と内部のimport main1
参照を移動しmyfunc
て表示するa
main1.py
import myfunc
a = 10
def main():
print a
myfunc.print_a()
if __name__ == '__main__':
main()
myfunc.py
import main1
def print_a():
print main1.a
オプション 2)推奨変数を別のモジュールに移動し、両方を持ってmyfunc
インポートmain1
します。
vals.py
a = 20
main1.py
import vals
from myfunc import print_a
vals.a = 10
print vals.a
print_a()
myfunc.py
import vals
def print_a():
print vals.a