Python(関数のスコープ)
def f():
print(x)
def g():
# globalな変数で定義されているxを再度定義している
# = この関数内のxはprintの下にあるのでエラー
#global x # globalなxを参照すればエラーはなくなるが、下のxはローカルではなくなる
print(x)
#x=1 # ローカルな変数を使いたいのであれば、別の変数名にする
#もしくは関数内関数を定義してreturnで値を返す
def local_num():
x=0
return x
return local_num()
x=3
f()
x=3
g=g()
print(g)
変数にはグローバル変数とローカル変数があることはご存知ですか?
プログラミングではグローバル変数をできるだけなくしてローカル変数を用いるようにとよく言われます。
ただ、Pythonには関数内で生成した変数がC/C++/C#言語のように関数内だけ通用する変数って言うもの(ブロックスコープ)がない!!
なので、上記プログラムのようにグローバルで設定したxという変数を関数内変数として用いる場合、f()は外の変数が使えてしまうけど、g()は関数内の実行部より後ろにxが定義されているのでエラーが出ます(汗)
関数内で他の変数の値を変更する場合、Pythonにはポインタもないのでglobalやnonlocalを指定して参照できるようにしたり、関数内の引数で数値を受け取って、returnで別の値を返すようにしたりと慣れが必要そうです…