[解決済み] モジュール変数を他のモジュールから変更するには?
質問
という名前のパッケージがあるとします。
bar
という名前のパッケージがあり、そのパッケージには
bar.py
:
a = None
def foobar():
print a
と
__init__.py
:
from bar import a, foobar
そして、このスクリプトを実行します。
import bar
print bar.a
bar.a = 1
print bar.a
bar.foobar()
以下は期待するところです。
None
1
1
こんな感じです。
None
1
None
どなたか私の誤解を説明してください。
どのように解決するのですか?
あなたが使用している
from bar import a
.
a
はインポートするモジュールのグローバルスコープ(またはimport文が発生する任意のスコープ)のシンボルになります。
に新しい値を代入すると
a
に新しい値を代入すると、どの値
a
が指す値を変えているだけで、実際の値ではありません。試しに
bar.py
で直接
import bar
で
__init__.py
を設定し、そこで実験を行います。
bar.a = 1
. この方法では、実際に変更するのは
bar.__dict__['a']
の「本当の」値である
a
の本当の値です。
3層で少し複雑ですが
bar.a = 1
の値を変更します。
a
というモジュールで
bar
というモジュールで、実際には
__init__.py
. の値を変更することはありません。
a
その
foobar
が見えるのは
foobar
は実際のファイル
bar.py
. を設定することができます。
bar.bar.a
を設定することができます。
を使うことの危険性の一つです。
from foo import bar
の形式は
import
ステートメントを分割します。
bar
の中からグローバルに見える2つのシンボルに分割します。
foo
の中でグローバルに見えるシンボルで、最初は元の値を指します。
import
ステートメントが実行されるスコープで見える別のシンボルを指しています。シンボルが指す場所を変更しても、それが指している値は変わりません。
このようなことは
reload
を試みるとき、この種のものは殺人的です。
関連
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] 環境変数の値にアクセスする方法
-
[解決済み] 億の相対的輸入
-
[解決済み] モジュール名を文字列で指定してインポートするには?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
opencvとpillowを用いた顔認証システム(デモあり)
-
Python百行で韓服サークルの画像クロールを実現する
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].