6

グローバル変数を使用しているときに、Pythonで奇妙な問題に遭遇しました。

私は2つのモジュール(ファイル)を持っています:mod1.pyそしてmod2.py

mod1varで定義されたグローバル変数を変更しようとしmod2ます。しかし、varmod2とvarinmodは2つの異なるもののようです。したがって、結果は、そのような変更が機能しないことを示しています。

コードは次のとおりです。

#code for mod2.py
global var  
var = 1 
def fun_of_mod2():
    print var

#code for mod1.py
from mod2 import var,fun_of_mod2    
global var #commenting out this line yields the same result
var = 2 #I want to modify the value of var defined in mod2
fun_of_mod2() #but it prints: 1 instead of 2. Modification failed :-(

なぜこれが起こるのかについてのヒントはありますか?valそして、どうすればで定義されmod2たの値を変更できmod1ますか?

ありがとう

4

1 に答える 1

12

にインポートvarするときmod1

from mod2 import var,fun_of_mod2

var mod1の名前空間で名前を付けています。それはあなたがこれをしたかのようです:

import mod2
var = mod2.var
fun_of_mod2 = mod2.fun_of_mod2
del mod2

つまり、値には2つの名前がありmod1.varますmod2.var。最初は同じですが、再割り当てするとmod1.varmod2.var同じことを指します。

あなたがしたいことはただ:

import mod2

次に、変数にアクセスして、として割り当てますmod2.var

Pythonのグローバル変数は真にグローバルではないことに注意することが重要です。これらは、宣言されているモジュールに対してのみグローバルです。別のモジュール内のグローバル変数にアクセスするには、module.variable構文を使用します。このglobalステートメントを関数内で使用して、モジュールグローバル名を割り当てることができます(ステートメントがない場合、変数に割り当てると、その関数のローカル変数になります)。他の効果はありません。

于 2012-06-03T07:10:34.500 に答える