0

以下のプログラムでグローバル変数に書き込めません。誰かが私にこれに対する解決策を教えてもらえますか? 私の変数は、およびvar以外のファイルにある必要があることに注意してくださいMod2.pyMod3.py

Mod1.py で

var = 5

Mod2.py で

from Mod1 import *

def foo(newValue):
  global var
  print('foo: %d' % var)
  var = newValue

print('before: %d' % var)
foo(2)
print('after: %d' % var)

Mod3.py で

from Mod2 import *

foo(3)
print('var: %d' % var)

実行時の結果Mod3.py

before: 5
foo: 5
after: 2
foo: 2
var: 2

しかし、私はそれがあることを期待しています

before: 5
foo: 5
after: 2
foo: 2
var: 3

を使用したソリューションは必要ありませんimport Modx.py

4

4 に答える 4

2

おそらく、変数のインポートが思ったほどうまくいかないという事実と関係があります。

from Mod1 import var

と同じです

import Mod1
var = Mod1.var  # this creates a new variable

コードで何が起こっているのかを正確に説明することはできませんが、インポートを次のように変更すると言えます。

import Mod1

そして、変数(今はグローバルなし)を次のように参照します

Mod1.var

問題が解決しました。

Mod2.py:

import Mod1

def foo(newValue):
  print('foo: %d' % Mod1.var)
  Mod1.var = newValue

print('before: %d' % Mod1.var)
foo(2)
print('after: %d' % Mod1.var)

Mod3.py:

import Mod1
from Mod2 import *

foo(3)
print('var: %d' % Mod1.var)

出力:

before: 5
foo: 5
after: 2
foo: 2
var: 3

http://www.python.org/dev/peps/pep-0008/もご覧ください。それが推奨するもののいくつか:

* avoid wildcard imports (`from <module> import *`) for the various problems they introduce
* module names should be `lowercase`

さらに、グローバル変数は通常、適切とは見なされず、それらを回避する方法が常にあります。グローバル変数が悪である理由を参照してください。.

于 2013-10-07T09:47:11.087 に答える
0

を使用したソリューションは必要ありませんimport Modx.py

それ無理。必要なことを行う唯一の方法は、他のモジュールで名前を再バインドすることです。これには、名前を直接ではなく、モジュールをインポートしてアクセスする必要があります。

于 2013-10-07T09:47:00.367 に答える
0

あなたは言う必要がありますfrom mod1 import var

なんで?

あなたのコードは と言ってfrom mod1 importいますが、これを見ると未完成のステートメントであることがわかります。何をインポートしますか? 指定する必要があります。import mod1これは、すべてをインポートする単純なプロセスを実行したくない場合です。

于 2013-10-07T16:35:20.047 に答える