Python学習中の方であれば1度は疑問に思うであろう「*args」「**kwargs」について端的に説明します。
結論から説明すると、*args/**kwargs は、自由に引数の数を指定できる引数のことです。
このページでは、*args/**kwargsはどのように利用されるのか?利用シーンや押さえておきたいツボをサンプルコードを用いて解説していきます。
関数や、リスト・辞書(ディクショナリ)などの基本用語が出てきますが、それらの基本となる用語・概念についても合わせて解説していますので、是非最後までご覧ください。
前提:関数の基本
*args/*kwargsは、関数の引数として用いられます。
前提として関数とは何かをおさらいしておきましょう。
関数は、一言で言えば「複数の処理を1つにまとめて名前を付けたもの」。 処理を予め構造化(定義)しておき、あとから呼び出す形で利用するイメージです。

def func1 (): # 関数の定義 print("初めての関数") func1() # 関数の呼び出し # 結果 ⇒ 初めての関数
初心者向けに、Pythonにおける関数の基本を1から丁寧に解説しています。
*args/**kwargsとは?
関数のパラメータを定義する際に、引数に「*(アスタリスク)」を1つ、もしくは2つつけることで任意の数の引数を指定することができるようになります。
関数を定義する際に引数を2つ指定した場合には、関数の実行時に必ず2つの引数を渡さなければいけませんでした。(3つの引数であれば3つ。4つの引数であれば引数を4つ渡さなければならないということ。)

「引数」の先頭に「*」を付与することで、引数には任意の数のパラメータを渡すことができるようになるということです。

この引数の数を任意に指定できる引数を「可変長引数」と呼び、Pythonでは慣例的に「*agrs」「**kwargs」として記述します。
構文ルールとしては、引数の前に「*(アスタリスク)」を付与するだけでOK。それだけで可変長引数であることを表現することができます。
ただし、*を付与した引数が「可変長引数であるということ」を分かりやすくするために 「*agrs」「**kwargs」 と記述するのが慣例で巣。
「*a」や「**aaa123」という名称でも良いですが、特にその名称に意味が無いような場合は*args/**kwargsの名称を用いるようにしましょう。
*args
*(アスタリスク)を1つ付与した場合、複数の引数をタプルとして受け取ります。
def func1(*args): print(args) func1(1, 2, 3, 4, 5) # 結果 ⇒ (1, 2, 3, 4, 5)
"args" は argument(日本語:引数) の複数形の略です。
タプルとは、配列の仲間です。

配列は、複数の値を代入することが可能な変数だと理解してしまってOK。
タプルは、配列と似ていますが、要素の変更ができないものです。
tuple = ("あいうえお","かきくけこ","さしすせそ") tuple(0) = "たちつてと" # 要素を変更しようとするとエラーになる
タプルについて詳しき知りたい方は、こちらの記事をご覧下さい。
*args を普通の引数と同時に用いる
*args を普通の引数と一緒に用いることも可能です。
def func2(number, name, *points): print(number, name) print(points) func2(10, 'Yamada Taro', '100', '98' ,'76' ,'97' ,'82') """ 結果 10 Yamada Taro ('100', '98', '76', '97', '82') """
**kwargs
引数の先頭に * を2つ付与した場合、複数の値を辞書(ディクショナリ)として受け取ります。
def func2(**points): print(points) func2(English='100', Math='98', Science='76' ,Social='97' ,Japanese='82') """ 結果 {'English': '100', 'Math': '98', 'Science': '76', 'Social': '97', 'Japanese': '82'} """
辞書(dictionary)とは、keyとvalueの組み合わせが含まれているデータのことです。
# 辞書「city」の定義 city = { '東京' :"東京", '神奈川':"横浜", '大阪' :"大阪", '愛知' :"名古屋", '北海道':"札幌", } print(city['神奈川']) # キー「神奈川」の値を表示 print(city['愛知']) # キー「愛知」の値を表示 # 結果はこちら """ 横浜 名古屋 """
**kwargs を普通の引数と同時に用いる
**kwagrs を普通の引数と一緒に用いることも可能です。
def func2(number, name, **points): print(number, name) print(points) func2(10, 'Yamada Taro', English='100', Math='98', Science='76' ,Social='97' ,Japanese='82') """ 結果 10 Yamada Taro {'English': '100', 'Math': '98', 'Science': '76', 'Social': '97', 'Japanese': '82'} """
Pythonを1から学習したい方は
Pythonをより実践的に学びたい―。実際にコーディングをしながら学びたい―。独学に限界を感じている―。
そんな方には、無料体験/オンライン完結もあるプログラミングスクールで学ぶのがおすすめです。都度検索しながら知識を補完していくのではなく、1から体系立てて学ぶことで短時間・かつ効率的にスキルハックすることが可能です。
各プログラミングスクールの特徴をまとめた記事をこちらに記載しておきますので、是非ご覧ください。