1

関数内で変数名が割り当てられている場合、変数名はローカルとして宣言され、関数内からモジュール変数にアクセスしたいので、モジュール内でモジュール名をインポートし、それを使用してモジュール変数にアクセスできますか?

例(ファイル名:server.py):

import server

bar = 5

def foo():
   server.bar = 10
4

4 に答える 4

6

他のすべての回答で提案されているように、ステートメントを使用する代わりに、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また、メインモジュールでのみ実行するコードを上記のステートメントでラップする必要があります。そうしないと、繰り返し実行されます。

于 2011-08-17T07:18:57.360 に答える
1

そのようにインポートすることはできませんし、インポートする必要もありません。module-global変数を直接使用するだけです。

def foo():
    global bar
    bar = 10

ローカル変数を作成するのではなく、グローバルに宣言して設定する必要があります。

于 2011-08-17T07:16:34.710 に答える
1

なぜだめですか:

def foo():
  global bar
  bar = 10
于 2011-08-17T07:16:44.007 に答える
0

いいえ、代わりにグローバルステートメントを使用してください。

def foo():
    global bar
    bar = 10
于 2011-08-17T07:18:26.103 に答える