【Python】変数とスコープ
こんにちは、ピコピコくんです。
今回はPythonの「変数とスコープ」について書きました。
変数とスコープ
変数は何らかの名前空間に属しています。参考書籍によると名前空間にはグローバル名前空間とローカル名前空間があると認識しておけばとりあえず良いらしいです。
スコープとは変数名だけでその変数にアクセスできる範囲のことを言います。
名前空間
グローバル名前空間
関数の外側で定義した変数はグローバル名前空間に属します。関数の内側からのスコープはグローバル名前空間を参照できるため、関数の内部からもグローバル名前空間の変数にアクセスできます。
下記のコードでは変数global_scope_listを定義し、my_func関数の中からglobal_scope_listに要素の追加と表示を行っています。
サンプルコード
# グローバル名前空間に属する変数の定義
global_scope_list = [1, 2, 3]
# グローバル名前空間に属する変数に要素を追加し表示する関数の定義
def my_func():
global_scope_list.append(10)
print(global_scope_list)
# my_funcの実行
my_func()
実行結果
[1, 2, 3, 10]
グローバル名前空間に属するglobal_scope_listに要素が追加され、内容が表示されました。my_func関数内からglobal_scope_listにアクセスできることがわかります。
ローカル名前空間
関数の中で変数を定義するとグローバル名前空間とは別にローカル名前空間が用意されます。ローカル名前空間に定義された変数はこの名前空間に属するため関数の外には影響しません。
下記のコードではグローバル名前空間の変数 global_scope_list を定義しています。続いてmy_func関数の中でもglobal_scope_listというグローバル名前空間にある変数と同じ名前の変数を定義してprint関数で画面に表示する処理を書いています。
サンプルコード
global_scope_list = [1, 2, 3]
def my_func():
global_scope_list = [100, 1000, 10000]
print(global_scope_list)
# 関数 my_funcの実行
my_func()
# グローバル名前空間の変数 global_scope_list の内容を表示
global_scope_list
実行結果 1
my_funcを実行すると関数内で定義した変数 global_scope_list の内容が表示されます。
my_func()
[100, 1000, 10000]
実行結果 2
my_func関数を実行した後にグローバル名前空間の変数global_scope_listの内容を表示してみると、最初に設定した値がそのまま変わらず表示されます。ローカル名前空間の変数がグローバル名前空間に影響を与えていないことがわかります。
global_scope_list
[1, 2, 3]
参考書籍
Pythonで学ぶアルゴリズムとデータ構造で勉強中です。