私の理解では、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
関数、クラス、またはその他のオブジェクトをローカル コンテキストで宣言するために を使用することもできます。ただし、何か問題が発生したりデバッグが必要になったりすると悪夢を引き起こすため、これはお勧めしません。