Pythonの関数(位置専用引数、キーワード専用引数)

Pythonの関数の引数には普通に値を渡すだけでなく、特殊な操作も行えます。

位置専用引数

関数の引数に「/」を入れると「/」の前の引数を位置引数としてのみ値を渡すことを宣言できます。
具体的には以下のように使用します。

def add(num1, num2, /, num3):
    return num1 + num2 + num3

add(1, 2, num3=3) # 正常に動く
add(num1=1, 2, num3=3) # num1をキーワードで指定するとエラーになる

関数の呼び出し時にキーワード指定をさせたくない引数を指定することができます。関数を作成した段階では呼び出し元から引数を明示的に指定するつもりがない場合などに「/」を入れておきます。これにより将来的に引数の名前を変更した際に呼び出し元がキーワードを指定しており、エラーが起きるということを防ぐことができます。

キーワード専用引数

関数の引数に「*」を入れると「*」のあとの引数をキーワード引数としてのみ渡すことを宣言できます。
具体的には以下のように使用します。

def add(num1, *, num2, num3):
    return num1 + num2 + num3

add(1, num2=2, num3=3) # 正常に動く
add(n1, 2, num3=3) # num2をキーワードで指定しないとエラーになる

# 呼び出し元で関数の振る舞いを明示的に制御する例
def division(num, divisor, *, ignore_zero_division):
    try:
        return number, divisor
    except ZeroDivisionError:
        if ignore_zero_division:
            return float("inf")
        else:
            raise
 
 division(1, 0, ignore_zero_division=True)

divisionの関数の例のように関数の振る舞いが引数で変わる場合に呼び出し元の意図を明確にさせたい場合などに「*」を用いてキーワード引数を強制することができます。

最後に追加でキーワード専用引数と位置専用引数を組み合わせた場合の動きも載せます。

def add(num1, /, num2, *, num3):
    return num1 + num2 + num3

add(1, 2, num3=3) # num2を位置引数として使用
add(1, num2=2, num3=3) # num2をキーワード引数として使用

「/」と「*」の間にある引数は位置、キーワードの両方で渡すことができます。

この記事が気に入ったらサポートをしてみませんか?