この記事はQiitaに投稿したものの動作確認用に再編成したものです。
元記事: https://qiita.com/comapi/items/b287904b2b6354036476
Pythonのスコープについて理解するためのコードを4つ紹介いたします。
def func():
orange = 300
orange = 100
func()
print(orange)
print()で出力されるorangeはグローバル変数のorangeです。 関数内のorangeはローカル変数であるため、代入した300は反映されていません。
def func():
print(orange)
orange = 42
func()
関数内でorangeがprint()で出力されていますが、ローカルスコープ内にorangeへの代入がないです。この場合はグローバル変数から値を読み取ってきます。
def func():
global orange
orange = 'local'
orange = 'global'
func()
print(orange)
ローカルスコープ内でグローバル宣言をすることで、グローバル変数を読み取り・書き変えることができます。
def func():
print(orange)
orange = 'local'
orange = 'global'
func()
UnboundLocalError
local variable 'orange' referenced before assignment
---------------------------------------------------------------------------
UnboundLocalError Traceback (most recent call last)
/tmp/ipykernel_41/2556656841.py in <module>
4
5 orange = 'global'
----> 6 func()
/tmp/ipykernel_41/2556656841.py in func()
1 def func():
----> 2 print(orange)
3 orange = 'local'
4
5 orange = 'global'
UnboundLocalError: local variable 'orange' referenced before assignment
このコードはエラーとなります。理由は以下の順にプログラムが実行されるためです。
ここまでご覧いただきありがとうございます。 Magicodeはエラーも再現できる点がとても良いですね!