Pythonにおけるスコープの扱いのニュアンス
ローカル変数とグローバル変数を扱う上での重要なニュアンスについて考察します。
グローバル変数 num があるとします。
グローバルな num をコンソールに出力する関数 func を作成してみましょう。
num = 1
def func():
print(num)
func() # 1を出力します
では、関数 print の次の行にローカルな num を宣言してみましょう。
コードを実行すると、コンソールにエラーが出力されます。
これは、Pythonが関数内で num をまだ宣言されていないローカル変数としてのみ認識するためです。
num = 1
def func():
print(num) # エラーを出力します
num = 2
では、関数内のコードを書き換えて、変数 num の値が 2 増えるようにしてみましょう。
num = 1
def func():
num += 2 # エラーを出力します
このエラーは、式 num += 2 が次の記述を表しているために発生します。
num = num + 2
しかし、加算しようとしているローカル変数自体はまだ宣言されていません。 したがって、存在しない値に数値を加算することはできないため、Pythonはエラーを出力します。
次のコードを実行した結果はどうなりますか。
tst = '12'
def func():
tst = 12
return tst
print(tst)
次のコードを実行した結果はどうなりますか。
tst = 'abc'
def func():
tst = tst.upper()
return tst
func()
print(tst)
次のコードを実行した結果はどうなりますか。
tst = 'abc'
def func():
txt = tst.upper()
return txt
print(func())
print(tst)