Pythonの*args徹底解説! 可変長引数を理解してコードを効率化しよう


 

Pythonを学んでいると、関数の定義で *args という見慣れない記述を見かけることがありますよね。「これって何?」「どう使うの?」と疑問に思った方も多いのではないでしょうか。

この記事では、Pythonの***args**(アスタリスク・アージズと読みます)について、その役割から具体的な使い方、さらにはよくある疑問まで、初心者の方にも分かりやすく徹底的に解説します。*argsを理解すれば、あなたのPythonコードはもっと柔軟で効率的になりますよ!


 

*argsとは?なぜ使うのか?

 

*args は、Pythonの関数が**可変長引数(Variable-length arguments)**を受け取るための特殊な構文です。これを使うと、関数を呼び出す際に、引数の数をあらかじめ決めることなく、いくつでも渡せるようになります。

例えば、数字を合計する関数を考えてみましょう。

  • 2つの数字の合計:add(a, b)

  • 3つの数字の合計:add(a, b, c)

  • 5つの数字の合計:add(a, b, c, d, e)

このように、合計したい数字の数が増えるたびに関数を定義し直すのは非効率的ですよね。ここで *args の出番です! *args を使えば、どんなに多くの数字が渡されても、たった一つの関数で処理できるようになります。


 

*args の基本的な使い方

 

*args は、関数の仮引数(定義する側の引数)として使用します。慣習的に args という名前が使われますが、アスタリスク * が付いていれば、*numbers*items など、どんな変数名でも構いません。

 

構文

 

Python
 
def 関数名(*args):
    # args はタプルとして渡された引数を受け取る
    pass

 

具体例:複数の数字を合計する関数

 

先ほどの例を *args を使って実装してみましょう。

Python
 
def sum_all_numbers(*args):
    total = 0
    for num in args: # argsはタプルなのでループで処理できる
        total += num
    return total

print(sum_all_numbers(1, 2, 3))         # 出力: 6
print(sum_all_numbers(10, 20, 30, 40)) # 出力: 100
print(sum_all_numbers())                # 出力: 0 (引数なしでもOK)

この例でわかるように、*args を使うことで、sum_all_numbers 関数は渡される引数の数に関わらず、それらをすべて合計することができます。関数内で argsタプルとして扱われるため、インデックスでアクセスしたり、ループで要素を一つずつ取り出したりできます。


 

*args と他の引数の組み合わせ

 

*args は、通常の引数やキーワード引数(**kwargs)と組み合わせて使うこともできます。

 

通常の引数と組み合わせる場合

 

*args は、通常の引数よりも後に記述する必要があります。

Python
 
def greet_people(greeting, *names):
    for name in names:
        print(f"{greeting}, {name}!")

greet_people("こんにちは", "太郎", "花子", "次郎")
# 出力:
# こんにちは, 太郎!
# こんにちは, 花子!
# こんにちは, 次郎!

この場合、最初の引数 "こんにちは"greeting に、それ以降の "太郎", "花子", "次郎"names (タプル) に格納されます。

 

*args**kwargs の併用

 

*args**kwargs(キーワード引数の可変長引数)を両方使う場合、順番は 通常の引数 -> *args -> **kwargs となります。

Python
 
def show_info(name, *details, **options):
    print(f"名前: {name}")
    print(f"詳細: {details}") # タプル
    print(f"オプション: {options}") # 辞書

show_info("山田", "男性", 30, city="東京", occupation="エンジニア")
# 出力:
# 名前: 山田
# 詳細: ('男性', 30)
# オプション: {'city': '東京', 'occupation': 'エンジニア'}

 

* を使ってリストやタプルを展開する(引数のアンパック)

 

*args は関数の定義側で使われるものですが、関数を呼び出す側でリストやタプルに * を付けると、その要素を個別の引数として関数に渡すことができます。これを**引数のアンパック(Unpacking arguments)**と呼びます。

Python
 
def multiply(a, b, c):
    return a * b * c

numbers = [2, 3, 4]
print(multiply(*numbers)) # リストの要素が個別の引数として渡される
# 出力: 24 (multiply(2, 3, 4) と同じ)

coords = (10, 20, 30)
print(multiply(*coords)) # タプルの要素も同様
# 出力: 6000 (multiply(10, 20, 30) と同じ)

これは、可変長引数を受け取る関数に、既にリストやタプルとして持っているデータを渡したい場合に非常に便利です。

Python
 
def print_all(*items):
    for item in items:
        print(item)

my_list = ['りんご', 'バナナ', 'オレンジ']
print_all(*my_list)
# 出力:
# りんご
# バナナ
# オレンジ

 

まとめ

 

*args は、Pythonで柔軟な関数を作成するための非常に強力なツールです。

  • 可変長引数を受け取るために使用する。

  • 関数内部ではタプルとして扱われる

  • 通常の引数や **kwargs と組み合わせることができる(記述順序に注意)。

  • 関数呼び出し時にリストやタプルに * を付けることで、**要素を個別の引数として展開(アンパック)**できる。

これらの機能を理解し使いこなすことで、あなたのPythonコードはより簡潔で汎用性の高いものになるはずです。ぜひ今日の学習を活かして、あなたのコードを改善してみてくださいね!

 

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座