前の記事のフィボナッチ数列の実装の中で、関数が呼び出された回数を数えるために少し仕掛けをいれました。
参考:pythonの関数をメモ化する
で、その中で global
と言うのを使っているのでその解説です。
ドキュメントはこちら。
global文
pythonでは、関数の中でグローバル変数を”参照”することができます。
しかし、そのままではグローバル変数に”代入”はできません。
やってみましょう。
まずは、”参照”ができることの確認。
a = 1
def sample1():
# グローバル変数aの値を参照できるためaの値1を戻す。
return a
sample1() # 1
次に、代入を試してみます。ちょっとわかりにくいですが、グローバル変数bを用意し、
関数中でbに代入していますがこのbが実はローカルの変数で、
関数の外でもともと宣言されていたbに影響していないことがわかります。
b = 2
def sample2():
# グローバル変数bへの代入はできないので、このbはローカル変数
b = 3
print(b)
sample2() # 3
# 変数bは変更されていない
print(b) # 2
これが、global文を使うと、グローバル変数への代入が可能になります。
c = 10
def sample3():
global c
c = 20
print(c)
sample3() # 20
# 関数中の変更が反映されている
print(c) # 20