【Python】可変長引数「*args」を関数で使う

Pythonでは、関数の引数に可変長引数 「*args」を使うことができます。

可変長引数とは長さの決まっていない引数のことです。

今回は、Pythonで関数の引数の使い方(可変長引数 *args)を解説します。

可変長引数「*args」を関数で使う

可変長引数「*args」

Pythonの関数には可変長引数「*args」があります。

この可変長引数というのは、可変長という名前からもわかるとおり、長さが決まっていないという意味です。長さが決まっていない引数のことです。

可変長引数を使う場合は「*」(アスタリスク)を使います。Pythonでは変数名を形式的に「args」とします。

変数名は「args」でなくてもいいのですが、「args」を使うのが一般的なので、引数としては「*args」となります。

「*args」のデータ型は可変長のタプル(tuple)になります。

Pythonで可変長ではない引数の指定の仕方はこちらを参照してください。

参考ページPythonの関数の引数の使い方

辞書型の可変長引数「kwargs」はこちらを参照してください。

参考ページ可変長引数「**kwargs」(辞書型)を関数で使う

関数で可変長引数「*args」を使う

# 可変長引数を使う関数
def cul_num(*args):
    num = sum(args)
    return num
# 関数呼び出し 
cul = cul_num(1, 2)
print(cul)
#[結果] 3

cul = cul_num(1, 2, 3, 4, 5) 
print(cul) 
#[結果] 15

関数「cul_num」の引数を可変長引数「*args」にしました。

関数を呼び出す側では、「cul_num(1, 2)」と「cul_num(1, 2, 3, 4, 5)」の2パターンで呼び出しました。配列の要素数を2つの場合でも5つの場合でも関数を実行できました。

このように配列の要素数が決まっていないときには、可変長引数「*args」が有効に使えますね。

関数で可変長引数「*args」を通常の引数と同時に使う

# 可変長引数と通常の引数を使う関数
def cul_num(i, *args):
    num = sum(args)
    if i > num:
        return i
    else:
        return num
# 関数呼び出し 
cul = cul_num(20, 1, 2, 3, 4, 5) 
print(cul) 
#[結果] 20

Pythonで可変長引数と通常の引数を同時に関数で使用する場合は、通常の引数を先に書き、可変長引数を後に書きます。

この関数では「第一引数の値」と「それ以外の引数の合計値」の大きい方を返す関数です。

関数の呼び出し側では「cul_num(20, 1, 2, 3, 4, 5) 」と書きました。第一引数の「20」が「cul_num」の引数「i」に対応し、「1, 2, 3, 4, 5」が「*args」に対応します。

可変長引数「*args」の後に通常引数は使えない

def cul_num(*args, i):
    num = sum(args)
    if i > num:
        return i
    else:
        return num
# 関数呼び出し 
cul = cul_num(20, 1, 2, 3, 4, 5) 
print(cul) 
#[結果] TypeError: cul_num() missing 1 required keyword-only argument: 'i'

先ほどの関数の引数を入れ替えてみました。可変長引数を第二引数にするとエラーになりました。可変長引数と通常引数の順番は先に可変長引数を指定する必要があります。

ただし、通常の引数を初期値ありにすれば使えます。

def cul_num(*args, i=1):
    num = sum(args)
    if i > num:
        return i
    else:
        return num

 

以上、Python 関数の引数の使い方(可変長引数 *args)でした。

 

コメント