ご存知のとおり、プログラムの開始後、各プログラム ファイルはメモリにロードされるため、プログラム テキストが再び変更されても、現在のプログラムの実行には影響しません。プログラムの保護。
ただし、Python のように解釈して実行する言語では、「モジュールインポート変数名」という形式を使用することがあります。この変数がファイル内で直接定義されている場合、これらの変数はプログラムの開始時に変更されます。定義されて値が割り当てられ、その値は動作中に変更されません。実行時にこのモジュールを書き換える予定がある場合、変更された変数値は使用できません。
この問題に対しては、考え方を変えて、このモジュール内の変数を関数で定義すると、プログラム実行時に動的に関数が実行されるので、変数の最新の値を取得することができます。以下に例を示します:
まず、関数を使用しない場合:
#test1.py
from model1 import p_hello
file = open('model1.py', 'w')
file.write("p_hello = '%s!'"%('こんにちは'))
file.close()
print p_hello
このようにして、test1.py を実行すると、結果は「hello you」ではなく「hello world」のままであり、モジュールのファイルがハード上で書き換えられているにもかかわらず、変数がメモリにロードされたことを示します。ディスク。
次に、関数を使用する場合:
#test1.py
model1 インポート ルールから
file = open('model1.py', 'w')
file.write('def rules():n')
file.write(" p_hello = '%s!'n"%('hello you'))
file.write(" return locals()n")
file.close()
p_hello = rules()['p_hello']
print p_hello
このように、印刷の結果はこんにちは。実行時に最初に関数が実行され、次に関数を通じて変数が取得されるため、新しい値が取得されます。