先日先輩エンジニアと取組中に引数の名前を言われて混乱してしまった為、関数のいろいろな引数についてまとめました。
・関数の基本的な動作はわかるが引数等の名前関係がよくわからない
コンテンツ
様々な関数名
Pythonの関数は、柔軟でシンプルな呼び出し方に対応できます。一方で柔軟でシンプルな呼び出しを実現するために、関数の引数周りの仕様は少々複雑になっています。一般的に関数定義時に使う引数を仮引数と呼び、関数呼び出し時に渡す引数を実引数と呼びます。
位置引数
関数の呼び出して、仮引数名を指定せずに渡す実引数を位置引数と言います。
位置引数を使う場合は、実引数の順番が仮引数の順番と一致します。
1 2 3 4 5 6 7 |
def increment(page_num, last): next_page = page_num + 1 if next_page <= last: return next_page raise ValueError('Invalid argument') result = increment(3, 10) print(result) #4 |
上記コードの場合、呼び出し結果から、1目の実引数2が仮引数page_numに、2目の実引数10が仮引数lastに渡されていることがわかります。
位置引数を使った関数の呼び出しでは、関数が必要とする引数の数と渡した実引数の数が一致しない場合には、例外TypeErrorが送出されます。実引数が足りない場合と多い場合では、エラーメッセージが異なります。
キーワード引数
関数の呼び出しで、仮引数名を指定して渡す実引数をキーワード引数と言います。
キーワード引数を使う場合は、呼び出し時の順番は呼び出し結果に影響しません。
1 2 3 4 5 6 7 |
def increment(page_num, last): next_page = page_num + 1 if next_page <= last: return next_page raise ValueError('Invalid argument') result = increment(page_num=3, last=10) print(result) #4 |
ちなみに順番を入れ替えても結果は同じです。
1 2 3 4 5 6 7 |
def increment(page_num, last): next_page = page_num + 1 if next_page <= last: return next_page raise ValueError('Invalid argument') result = increment(last=10, page_num=3) print(result) #4 |
呼び出し結果を見ると、どちらの呼び出し方でも引数page_numに2が、lastに10が渡されていることがわかります。
また存在しない仮引数名を指定すると例外TypeErrorが送出されます。
位置引数の時と同じ例外クラスですが、エラーメッセージは位置引数の時とは異なっています。
位置引数とキーワード引数の組み合わせ
位置引数とキーワード引数を組み合わせることもできます。
組み合わせて使う場合は、位置引数を先に書き、後ろにキーワード引数を書く必要があります。
1 2 3 4 5 6 7 |
def increment(page_num, last): next_page = page_num + 1 if next_page <= last: return next_page raise ValueError('Invalid argument') result = increment(3, last=10) print(result) #4 |
デフォルト値のある引数
関数を定義する際、仮引数にデフォルト値を指定できます。デフォルト値は、その引数に実引数が渡されない場合に利用されます。デフォルト値を使うと、関数呼び出しがシンプルになります。
デフォルト値は関数定義時に仮引数名=デフォルト値のように設定します。
1 2 3 4 5 6 7 8 9 10 |
def increment(page_num, last=10): next_page = page_num + 1 if next_page <= last: return next_page raise ValueError('Invalid argument') result = increment(3) print(result) # 4 result = increment(3, 3) print(result) # ValueError: Invalid argument |
デフォルト値のある仮引数は、デフォルト値のない仮引数よりも後ろにおく必要があります。
1 2 3 4 5 6 7 8 |
def increment(page_num=0, last): next_page = page_num + 1 if next_page <= last: return next_page raise ValueError('Invalid argument') result = increment(3, 10) print(result) # SyntaxError: non-default argument follows default argument |
既に利用されている関数にデフォルト値を持つ引数を追加しても、もとの呼び出し元のコードは修正する必要はありません。そのため、新機能の追加時やリファクタリング時には特に重宝されます。
コメントを残す