2

だから私は他の質問に対するアレックス・マーテリの答えを読んでいます...

「初期化が必要な例の 1 つは、パッケージのロード時に大量のデータを (ファイル、DB、または Web などから) 一度だけ読み込みたい場合です。その場合は、はるかに優れています。個別の「初期化モジュール」を用意するのではなく、その読み取り値をパッケージのinit .py のプライベート関数に入れ、パッケージ内のすべての実際のモジュールからそのモジュールを冗長にインポートする...」

残念ながら、これを試すと:

foo/__init__.py

import tables as tb
global foo
foo = tb.openFile('foo.h5', etc._)
import bar

フー/バー/__init__.py

import tables as tb
global bar
bar = foo.createGroup('/', bar)
import MyFunction`

foo/バー/MyFunction.py

def MyFunction(*of foo and bar*):
   '...'

>>> import foo
>>> OUTPUT= foo.bar.MyFunction.MyFunction(INPUT)
>>> bar = foo.createGroup('/', bar)
NameError: name 'foo' is not defined

関数に入れずにグローバル変数を定義するにはどうすればよいですか (ここで見られるように)?

4

1 に答える 1

2

グローバル変数は、Python コードのすべてのビットが同じグローバルのセットを見るという意味でグローバルではありません。グローバル性は実際には「モジュールスコープ」です。モジュールで定義されたすべての変数と関数はすでにグローバルであり、可能な限りグローバルです。

あるモジュールで定義された変数を別のモジュールのグローバル変数の中に表示したい場合、それを行う唯一の方法は、最初のモジュールの名前を 2 番目のモジュールにインポートすることです... IE:

# myModule.py
foo = "bar"
# yourModule.py
from myModule import foo
于 2012-11-08T01:08:04.933 に答える