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にはポインタもないのでglobalnonlocalを指定して参照できるようにしたり、関数内の引数で数値を受け取って、returnで別の値を返すようにしたりと慣れが必要そうです…

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Python

前の記事

Python(関数について)
Python

次の記事

Python(2進数→10進数変換)