関数内で変数名が割り当てられている場合、変数名はローカルとして宣言され、関数内からモジュール変数にアクセスしたいので、モジュール内でモジュール名をインポートし、それを使用してモジュール変数にアクセスできますか?
例(ファイル名:server.py):
import server
bar = 5
def foo():
server.bar = 10
関数内で変数名が割り当てられている場合、変数名はローカルとして宣言され、関数内からモジュール変数にアクセスしたいので、モジュール内でモジュール名をインポートし、それを使用してモジュール変数にアクセスできますか?
例(ファイル名:server.py):
import server
bar = 5
def foo():
server.bar = 10
他のすべての回答で提案されているように、ステートメントを使用する代わりに、global
モジュールレベルの変数を使用せずに、コンテナーとしてのクラス、またはグローバル専用の別のモジュールを使用します。
# mg.py
bar = 5
# server.py
import mg
def foo():
mg.bar = 10
また
class mg:
bar = 5
def foo():
mg.bar = 10
このようにして、ステートメントをどこにでも配置する必要がなくglobal
、それらの名前を再利用でき、どちらbar
を参照しているかが明確になります。
編集:また、モジュールをそれ自体の中にインポートすることは可能ですが、メインモジュールの変数をそのように変更することはできません。したがって、これは機能します:
# selfimport.py
import selfimport
def foo():
print selfimport.foo
bar = 3
if __name__ == '__main__':
print selfimport.bar
foo()
しかし、これはそうではありません:
# selfimport.py
import selfimport
bar = 3
def foo():
selfimport.bar = 5
if __name__ == '__main__':
print selfimport.bar
foo()
print bar # bar is still 3!
グローバルを定数としてのみ使用している場合は、global
とにかくステートメントは必要ありません。if
また、メインモジュールでのみ実行するコードを上記のステートメントでラップする必要があります。そうしないと、繰り返し実行されます。
そのようにインポートすることはできませんし、インポートする必要もありません。module-global変数を直接使用するだけです。
def foo():
global bar
bar = 10
ローカル変数を作成するのではなく、グローバルに宣言して設定する必要があります。
なぜだめですか:
def foo():
global bar
bar = 10
いいえ、代わりにグローバルステートメントを使用してください。
def foo():
global bar
bar = 10