2018.12.10Pythonでは、「変数や関数はその変数や関数が実際に使用されるまでに定義されればよい」というのが原則です。この原則から外れる場合があったり、関数のスコープに気を付けなければ、定義の位置を勘違いしてしまうことがあったりします。そこで、この記事では変数や関数の定義位置について整理してみたいと思います。目次0.チュートリアル学習のポイントシリーズ1.変数の定義位置の簡単な例2.関数の定義位置の簡単な例3.変数の定義位置の原則4.関数の引数のディフォルト値の変数指定は原則から外れる5.関数の定義位置の原則6.関数内の変数のスコープは関数の定義時に決定する0.チュートリアル学習のポイントシリーズこの記事は「Pythonチュートリアルのポイント整理シリーズ」の記事です。一連の記事は、以下のリンク集を参照してください。関数や変数の定義は、関数や変数を実際に実行するまでに定義する必要があります。コード01は問題なく実行されますが、コード02はエラーになります。「こんな簡単な例題なんて必要ない。」と言われそうですね。順を追って説明しますので、少し、我慢してください。次に、関数の定義位置についてみてみましょう。Pythonではコード03は問題ありませんが、コード04はエラーになります。関数についてはコード04のような書き方ができるプログラミング言語もありますので、他のプログラミング言語の経験がある人は注意が必要です。Pythonのインタプリタは、コード全体を理解したあとに実行するのではなく、前から順番にコードを理解しながら実行します。コード03のように2~3行目で関数xxx()がどのような関数であるかを理解したあとならば5行目のxxx()を実行できますが、コード04のように、いきなり最初の行にxxx()が現れても、Pythonはxxx()がどんな関数なのかを理解できません。これは、コード02がエラーになるのと似ています。print('xxx')3.変数の定義位置の原則グローバル変数であってもローカル変数であっても、複雑な入れ子構造の関数の中であっても、「変数はその変数が実際に使用されるまでに定義されればよい」というのが原則です。実際に関数の中のグローバル変数について検証してみます。コード05~08の関数xxx()の中の変数aはグローバル変数です。コード05、コード06はエラーにはなりませんが、コード07はエラーになります。関数xxx()の中のグローバル変数は、関数xxx()が定義される前に定義する必要はなく、実際に変数aが使用されるまでにaの値を定義すれば問題ありません。コード07のように、5行目のxxx()のあとに変数aを定義すると、変数aの使用時にaの値が定義されていないためにエラーになります。