Pythonでは、関数は通常メインコードより前、一番上に定義されます。しかし、この原則から外れる場合があったり、関数のスコープに気を付けなければ、定義の位置を勘違いしてしまうことがあったりします。
変数と関数の定義位置
Pythonでは、「変数や関数はその変数や関数が実際に使用されるまでに定義されればよい」というのが原則です。
#コード01
x = 10
print(x)
#コード02 →エラー
print(x)
x = 10
関数の定義位置
関数も変数と同じく実際に関数が実行されるまでに定義されていればよく、以下のように関数の呼び出しを行うことができます。
#コード11
def yyy():
xxx()
def xxx():
print('a =', a)
a = 1
yyy()
しかし、関数の定義が完了していない状態で関数を呼び出すとエラーになります。
#コード12 →エラー
a = 1
yyy()
def yyy():
xxx()
def xxx():
print('a =', a)
関数の引数のディフォルト値
「変数はその変数が実際に使用されるまでに定義されればよい」というのが原則ですが、実は例外が存在します。それは、関数の引数のディフォルト値を変数で指定するときです。
#コード09
a = 1
def xxx(x = a):
print('x =', x)
xxx()
関数の引数のディフォルト値を変数で指定するときだけは、「変数はその変数が実際に使用されるまでに定義されればよい」というのが原則から外れ、「関数の定義を行うまでに変数を定義する必要がある」となります。
#コード10 →エラー
def xxx(x = a):
print('x =', x)
a = 2
xxx()
以上、Pythonでの関数の定義位置についての基本的な考え方を解説しました。これらの知識を持っておくと、Pythonのコードを読んだり書いたりする際に役立つでしょう。.