グローバル変数にアクセスするために「global」キーワードが必要ないのはなぜですか? 質問する

グローバル変数にアクセスするために「global」キーワードが必要ないのはなぜですか? 質問する

私の理解では、Python には関数用の別の名前空間があるため、関数内でグローバル変数を使用する場合は、 を使用する必要があると思われますglobal

ただし、以下がなくてもグローバル変数にアクセスすることはできましたglobal:

>>> sub = ['0', '0', '0', '0']
>>> def getJoin():
...     return '.'.join(sub)
...
>>> getJoin()
'0.0.0.0'

なぜこれが機能するのでしょうか?


参照ローカル変数を最初に使用した後に再割り当てすると UnboundLocalError が発生するを使用せずにグローバル変数に代入しようとしたときに発生するエラーについてはglobal関数内でグローバル変数を使用するグローバルの使用方法に関する一般的な質問。

ベストアンサー1

このキーワードは、globalローカル コンテキストでグローバル変数を変更または作成する場合にのみ役立ちますが、グローバル変数を作成することは、ほとんど良い解決策とは見なされません。

def bob():
    me = "locally defined"    # Defined only in local context
    print(me)

bob()
print(me)     # Asking for a global variable

上記により、次のようになります:

locally defined
Traceback (most recent call last):
  File "file.py", line 9, in <module>
    print(me)
NameError: name 'me' is not defined

一方、globalステートメントを使用すると、変数は関数のスコープの「外部」で使用できるようになり、事実上グローバル変数になります。

def bob():
    global me
    me = "locally defined"   # Defined locally but declared as global
    print(me)

bob()
print(me)     # Asking for a global variable

したがって、上記のコードを実行すると次のようになります。

locally defined
locally defined

さらに、Python の性質上、global関数、クラス、またはその他のオブジェクトをローカル コンテキストで宣言するために を使用することもできます。ただし、何か問題が発生したりデバッグが必要になったりすると悪夢を引き起こすため、これはお勧めしません。

おすすめ記事