すらぼうの開発ノート

モバイルアプリエンジニアのメモ

【Python】ローカルスコープから、グローバルスコープの変数を更新するには

現在Recursionに取り組んでいる。 そこで学んだことをメモする。


スコープ

データや関数の影響範囲のこと。

ローカルスコープとグローバルスコープがあり、 ローカルスコープは特定のクラスや関数内の、制限された領域のこと。 ローカルスコープ内で定義された変数・関数はグローバルからばアクセスできない。 一方グローバルスコープは、プログラム上の全ての場所からアクセスできる。

更新方法

例えば以下のような場合を考える。

msg = "hello world"

def func1():
    print(msg) # グローバルのmsgを読み取ることは可能

このプログラムは問題なく起動する。 ただしfunc1()を以下のように更新するとエラーが発生する。

def func1():
    print(msg)
    msg = "good morning"


# UnboundLocalError: local variable 'msg' referenced before assignment

これはグローバルスコープのmsgをローカルスコープ内で更新しようとしたため。 このエラーを回避するには次のようにglobalキーワードをつける。

def func1():
    global msg
    msg = "good morning"