【Python】変数スコープの忘れやすい点を整理
個人的にPythonの変数スコープは分かりづらく、確認したり間違えることが多いです。
そこで、変数スコープでよく確認することのある3つを備忘録として整理します。
ちなみに、重箱の隅まで完璧に理解したいという方は↓のクイズとかをやってみてください。
正直ここまでのレアケースは完璧に理解する必要はないかなと思います。
意外とややこしい Python のスコープを理解するためのクイズ14問
1. 基本的にグローバル変数になる
Pythonでは変数宣言すると、基本的にグローバル変数となります。
関数内などは違いますが、なんとなく宣言した変数はすべてグローバルだと考えてください。
x = 1
例えば、この変数のスコープはグローバルです。
x = 1
def print_x():
print(x)
print_x()
xはグローバルなため、このように関数内で参照してもエラーは発生しません。
2. グローバル変数は関数の先に書いても後にOK
スクリプト言語だと時々、関数より先にグローバル変数の宣言が必要なことがあります。
Pythonでは先でも後でも問題ありません。(これを気にする人は少ないかな)
x = 1
def print_x():
print(x)
print_x()
def print_x():
print(x)
x = 1
print_x()
この2つのコードは、どちらも同じ動作をします。
3. globalキーワード
グローバル変数は、どこからでも"参照"が可能です。
参照可能ですが、中身を変えたいときにはglobalキーワードが必要になります。
def change_x():
global x # globalキーワード
x = 2
x = 1
change_x()
print(x)
関数内で中身を変えたいときには、一度globalキーワードを書いて、それから代入する必要があります。