グローバル変数と Python の関数から変更する方法
-
グローバル変数
を使用して、Python の関数から変更する -
Python で
グローバル
変数を作成する -
Python の関数から
グローバル
変数の値を変更する -
Python の
グローバル
キーワード - 複数の関数とグローバル変数
-
グローバル
変数と同じ名前の変数を持つ関数 - まとめ
Python のグローバル変数は、グローバルスコープ
を持つ変数です。言い換えれば、それらのスコープは、ソースコードの特定の機能またはブロックに限定されません。
グローバル変数
を使用して、Python の関数から変更する
まず、変数 x
を宣言します。
def avengers():
x = 10
print("Gibberish")
avengers()
print(x)
出力:
Gibberish
NameError: name 'x' is not defined
変数 x
は関数 avengers
の中にあります。これは、この変数のスコープがこの関数のみに制限されることを意味します。
このため、この関数の外部でこの変数にアクセスしようとするとエラーが発生します。
Python でグローバル
変数を作成する
変数 x
宣言を関数の外に移動します。
x = 10
def avengers():
print("Gibberish")
avengers()
print(x)
出力:
Gibberish
10
変数 x
は関数の外部で定義されているため、プログラム内のどこでも使用できます。
また、これはグローバル変数です。グローバルスコープで変数を宣言すると、Python でグローバル
変数が作成されます。
avengers
関数から global
変数 x
にアクセスすることもできます。
x = 10
def avengers():
print("From avengers:", x)
avengers()
print("Outside avengers:", x)
出力:
From avengers: 10
Outside avengers: 10
Python の関数からグローバル
変数の値を変更する
このコードには、10
のグローバル
変数 x
があります。次に、関数 change
内で、この変数 x
に 12
を追加します。
関数内の print ステートメントは、更新された x
の値を出力する必要があります。
x = 10
def change():
x = x + 12
print(x)
change()
出力:
UnboundLocalError: local variable 'x' referenced before assignment
Python では、関数はグローバル変数
にのみアクセスして出力できます。グローバル変数
への割り当てまたは変更を参照する関数に指示する必要があります。
これを指定しない場合、関数はローカル変数自体に割り当てと変更が行われたと見なします。したがって、このエラーが発生します。
global
キーワードを使用して、Python 関数内からグローバル変数
の値を変更します。
Python のグローバル
キーワード
Python は、スコープ外の変数を変更するための global
という名前のキーワードを提供します。変数の値を変更したり、割り当てを行う必要がある場合に使用します。
global
キーワードを使用して上記のコードを修正してみましょう。
x = 10
def change():
global x
x = x + 12
print(x)
change()
出力:
22
3 行目の global
キーワードを使用して、x
をグローバルとして指定する方法をご覧ください。
ここで、関数の外に出力するときの変数 x
の値を見てみましょう。
x = 10
def change():
global x
x = x + 12
print(x)
change()
print(x)
出力:
22
22
関数が x
を 10
から 22
に更新したため、ローカルスコープ外の変数にアクセスした場合でも、更新された値が出力として取得されます。
var = "A"
def chocolate():
print("From chocolate:", var)
def cake():
global var
var = var * 2
print("From cake:", var)
chocolate()
cake()
print("From main:", var)
出力:
From chocolate: A
From cake: AA
From main: AA
この出力から導き出せる最良の推論は、順序が重要です。chocolate
関数は、変更された値ではなく、var
の初期値を使用します。
これは、var
の値を変更する関数 cake
が関数 chocolate
の後に呼び出されるためです。最初に cake
関数を呼び出すと、chocolate
関数も var
の更新された値を使用します。
var = "A"
def chocolate():
print("From chocolate:", var)
def cake():
global var
var = var * 2
print("From cake:", var)
cake()
chocolate()
print("From main:", var)
出力:
From cake: AA
From chocolate: AA
From main: AA
これにより、Python の global
キーワードを使用する際に従う必要のあるいくつかのルールがわかります。
- デフォルトでは、関数内の変数はローカルであり、関数外の変数は
グローバル
です。関数外の変数にはこのキーワードを使用しないでください。 - Python の関数の外で
global
キーワードを使用しても、コードに影響はありません。 global
キーワードの主な用途は、Python で割り当てまたは変更を行うことです。したがって、単に変数にアクセスしたり、変数を出力したりするためには必要ありません。
複数の関数とグローバル変数
ここでは、値が 1
のグローバル変数 s
があります。関数 college
が global
キーワードを使用して s
の値を変更する方法をご覧ください。
s = 1
def college():
global s
s = s + 5
print("College students: ", s)
return s
def school():
s = college()
s = s + 10
print("School students: ", s)
return s
college()
school()
print("Global students: ", s)
出力:
College students: 6
College students: 11
School students: 21
Global students: 11
まず、関数 college
を呼び出します。この関数は、グローバル変数 s
を変更し、それを 6
に変更します。
最初の print ステートメントから 6
として出力を取得します。次に、関数を school
と呼びます。
関数 college
内で関数 school
を再度呼び出します。今回は、関数 college
も変数 s
の値を変更します。
以前の値 6
を取得してから、11
に更新します。したがって、グローバル変数の最終値は 11
になります。
次に、関数 school
がそれを変更しますが、これはグローバル変数で更新されません。更新された s
の値を使用し、10
を追加した後に値を出力します。
global
キーワードは使用しません。したがって、出力 21
。これで、最後のステートメントの出力が 11
である理由がわかります。
これは、グローバル変数 s
の更新された値に他なりません。
グローバル
変数と同じ名前の変数を持つ関数
グローバル
変数と同じ名前の変数が宣言されている関数がある可能性があります。
ここで発生する避けられない質問は、関数がどの変数を使用するかということです。ローカルまたはグローバル?見てみましょう。
# the global variable
a = 5
# function
def music():
# variable inside function with same name as global variable
a = 10
print("Music:", a)
music()
print(a)
出力:
Music: 10
5
このコードにはグローバル
変数 a
があり、その値は 5
です。関数 music
にも a
という名前の変数があります。
この変数の値は 10
です。関数内の変数 a
の値にアクセスすると、この関数にローカルな変数の値である 10
を取得します。
この関数の外部から a
の値にアクセスすると、出力は 5
として取得されます。
これは、ローカル
変数が特定のスコープでグローバル
変数と同じ名前で存在する場合、グローバル変数よりも優先されることを意味します。
まとめ
このチュートリアルでは、Python のグローバル
変数の基本を学びました。それらがローカル
変数とどのように異なるか、そして Python でそれらをどのように作成するかを見ました。