Python {Article101}

ようこそ「Python」へ...

Python関数の引数(*args, **kwargs)の使い方

ここではPython関数の引数「*args」と「**kwargs」の使い方について解説します。 Python関数の引数の形式には「位置指定(Positional)」と「キーワード指定(Keyword)」などがあります。 位置指定の引数は関数で指定する引数の順番が固定化されます。 一方、キーワード指定の引数は任意の順番で引数を指定することができます。 その他に特殊な引数として「*args」と「**kwargs」があります。

この記事ではMicrosoftのVisual Studio Code(VS Code)を使用していますが、Jupyter NotebookなどのツールでもOKです。 ここで解説しているPythonのコードは「GO LIVE DEMO」から直接編集しながら会話形式で学習することができます。

説明文の左側に図の画像が表示されていますが縮小されています。 画像を拡大するにはマウスを画像上に移動してクリックします。 画像が拡大表示されます。拡大された画像を閉じるには右上の[X]をクリックします。 画像の任意の場所をクリックして閉じることもできます。
click image to zoom!
図A:
click image to zoom!
図B:
click image to zoom!
図C:


Python関数の引数(*args, **kwargs)の使い方

  1. 関数の引数を位置指定形式で定義する

    VS Codeを起動したら新規ファイルを作成して行1-16を入力(コピペ)します。 行1ではPythonのライブラリを取り込んでいます。 行3-6では関数「emoji_positional()」を定義しています。 ここでは引数の形式を「位置指定」にしています。 行4-6では引数に指定した「絵文字」と絵文字の「CLDR」を表示しています。 CLDRの意味については「記事(Article096)」を参照してください。

    行8-10では絵文字を定義しています。 行13では関数「emoji_positional()」を呼び出しています。 関数の引数には絵文字が格納されている変数名を指定しています。 引数の個数は必ず3個指定する必要があります。 行16では関数「emoji_positional()」を呼び出しています。 関数の引数には直接絵文字を指定しています。 引数の個数は必ず3個指定する必要があります。
    import emoji    # pip install emoji
    
    def emoji_positional(emoji1, emoji2, emoji3):     
        print(f"{emoji1}  {emoji.demojize(emoji1)}")   
        print(f"{emoji2}  {emoji.demojize(emoji2)}")  
        print(f"{emoji3}  {emoji.demojize(emoji3)}")  
    
    hot_face = '🥵'             # :hot_face:
    sunglasse_face = '😎'       # :smiling_face_with_sunglasses:
    zipper_face = '🤐'          # :zipper-mouth_face:
    
    print('-'*50, '↓ print(1) ↓')
    emoji_positional(hot_face, zipper_face, sunglasse_face)
    
    print('-'*50, '↓ print(2) ↓')
    emoji_positional('🥵','🤐','😎')

    click image to zoom!
    図1
    図1は実行結果です。 「絵文字」と絵文字の「CLDR」が表示されています。


  2. 関数の引数をキーワード指定形式で定義する

    VS Codeを起動したら新規ファイルを作成して行1-21を入力します。 行1ではPythonのライブラリを取り込んでいます。 行3-9では関数「emoji_keyword()」を定義しています。 ここでは関数の引数を「キーワード指定」形式で指定しています。 さらにキーワードを省略したときの既定値として「None」を設定しています。 行4-9ではキーワードの値が「None」以外のときに「絵文字」と絵文字の「CLDR」を表示しています。

    行12-14では絵文字を定義しています。 行17-21では関数「emoji_keyword()」を呼び出しています。 行18では関数の引数を1個指定しています。 行21では関数の引数を3個指定しています。
    import emoji    # pip install emoji
    
    def emoji_keyword(emoji1=None, emoji2=None, emoji3=None):
        if emoji1 != None:
            print(f"{emoji1}   {emoji.demojize(emoji1)}")
        if emoji2 != None:
            print(f"{emoji2}   {emoji.demojize(emoji2)}")
        if emoji3 != None:
            print(f"{emoji3}   {emoji.demojize(emoji3)}")        
    
    
    emoji1 = '🖥️'              # :desktop_computer:
    emoji2 = '🖨️'              # :printer:
    emoji3 = '🖱️'              # :computer_mouse:
    
    
    print('-'*50, '↓ print(1) ↓')
    emoji_keyword(emoji1='🖥️')
    
    print('-'*50, '↓ print(2) ↓')
    emoji_keyword(emoji1='🖥️', emoji2='🖨️', emoji3='🖱️')

    click image to zoom!
    図2
    図2は実行結果です。 「絵文字」と絵文字の「CLDR」が表示されています。


  3. 関数の引数を「*args」形式で定義する

    VS Codeを起動したら新規ファイルを作成して行1-25を入力します。 行1ではPythonのライブラリを取り込んでいます。 行3-5では関数「emoji_positional()」を定義しています。 ここでは関数の引数に「*args」を指定しています。 「*args」は引数が「位置指定」のときに使います。 この指定を行うと引数の個数を可変にすることができます。 引数「args」には引数の値が「tuple」型で格納されます。 行4-5のforループでは引数の各要素の「絵文字」と絵文字の「CLDR」を表示しています。

    行8-12では絵文字を定義しています。 行15-25では関数「emoji_positional()」を呼び出しています。 関数の引数の個数は「1」と「3」を指定しています。
    import emoji    # pip install emoji
    
    def emoji_positional(*args): 
        for x in args:
            print(f"{x}  {emoji.demojize(x)}")   
    
    
    hot_face = '🥵'             # :hot_face:
    cold_face = '🥶'            # :cold_face:
    sunglasse_face = '😎'       # :smiling_face_with_sunglasses:
    mask_face = '😷'            # :face_with_medical_mask:
    zipper_face = '🤐'          # :zipper-mouth_face:
    
    
    print('-'*50, '↓ print(1) ↓')
    emoji_positional('😷')
    
    print('-'*50, '↓ print(2) ↓')
    emoji_positional('🥵','🤐','😎')
    
    print('-'*50, '↓ print(3) ↓')
    emoji_positional(hot_face)
    
    print('-'*50, '↓ print(4) ↓')
    emoji_positional(hot_face, zipper_face, sunglasse_face)

    click image to zoom!
    図3
    図3は実行結果です。 「絵文字」と絵文字の「CLDR」が表示されています。


  4. 関数の引数を「**kwargs」形式で定義する

    VS Codeを起動したら新規ファイルを作成して行1-21を入力します。 行1ではPythonのライブラリを取り込んでいます。 行3-5では関数「emoji_keyword()」を定義しています。 ここでは関数の引数に「**kwargs」を指定しています。 「**kwargs」は引数が「キーワード指定」のときに使います。 この指定を行うと引数の個数を可変にすることができます。 引数「kwargs」には引数の値が「dict」型で格納されます。 行4-5のforループで引数の各要素の「絵文字」と絵文字の「CLDR」を表示しています。

    行7-11では絵文字を定義しています。 行14-21では関数「emoji_keyword()」を呼び出しています。 関数の引数の個数は「1」「2」「4」となっています。
    import emoji    # pip install emoji
    
    def emoji_keyword(**kwargs): 
        for x in kwargs:
            print(f"{kwargs[x]}   {emoji.demojize(kwargs[x])}")
    
    laptop = '💻'               # :laptop:
    desktop = '🖥️'              # :desktop_computer:
    printer = '🖨️'              # :printer:
    mouse = '🖱️'                # :computer_mouse:
    pencil = '✏'                # :pencil:
    
    
    print('-'*50, '↓ print(1) ↓')
    emoji_keyword(laptop = '💻')
    
    print('-'*50, '↓ print(2) ↓')
    emoji_keyword(desktop = '🖥️', printer = '🖨️')
    
    print('-'*50, '↓ print(3) ↓')
    emoji_keyword(desktop = '🖥️', printer = '🖨️', mouse = '🖱️', pencil = '✏')

    click image to zoom!
    図4
    図4は実行結果です。 「絵文字」と絵文字の「CLDR」が表示されています。


  5. 関数(*args)の引数に「list型」の変数を指定する

    VS Codeを起動したら新規ファイルを作成して行1-33を入力します。 行1ではPythonのライブラリを取り込んでいます。 行3-10では関数「emoji_func()」を定義しています。 ここでは関数の引数に「*args, **kwargs」を指定しています。 この指定を行うと引数を「位置指定」「キーワード指定」のどちらの形式でも指定することができます。 行4-6では引数が「位置指定」のときの処理を行っています。 行8-10では引数が「キーワード指定」のときの処理を行っています。 forループで引数の各要素の「絵文字」と絵文字の「CLDR」を表示しています。

    行13-18では絵文字を定義しています。 行21-23では絵文字を「list」型で定義しています。 行26-33では関数「emoji_func()」関数を呼び出しています。 関数の引数にはlist型の変数名を指定しています。 変数名の先頭に「*」を付加すると変数の内容をアンパック(unpack)します。 つまり、前出の項番3と同じ指定になります。
    import emoji    # pip install emoji
    
    def emoji_func(*args, **kwargs):
        # if args:
        for x in args:
            print(f"{x}  {emoji.demojize(x)}")         
    
        # if kwargs:
        for x in kwargs:
            print(f"{kwargs[x]}   {emoji.demojize(kwargs[x])}")
    
    
    hot_face = '🥵'             # :hot_face:
    cold_face = '🥶'            # :cold_face:
    sunglasse_face = '😎'       # :smiling_face_with_sunglasses:
    mask_face = '😷'            # :face_with_medical_mask:
    thermometer_face = '🤒'     # :face_with_thermometer:
    zipper_face = '🤐'          # :zipper-mouth_face:
    
    # define emoji list
    emoji_list1 = ['🥵','🤐', '😎']
    emoji_list2 = [hot_face, zipper_face, sunglasse_face]
    emoji_list3 = [hot_face, zipper_face, sunglasse_face, cold_face, mask_face, thermometer_face]
    
    
    print('-'*50, '↓ print(1) ↓')
    emoji_func(*emoji_list1)
    
    print('-'*50, '↓ print(2) ↓')
    emoji_func(*emoji_list2)
    
    print('-'*50, '↓ print(3) ↓')
    emoji_func(*emoji_list3)

    click image to zoom!
    図5
    図5は実行結果です。 「絵文字」と絵文字の「CLDR」が表示されています。


  6. 関数(**kwargs)の引数に「dict型」の変数を指定する

    VS Codeを起動したら新規ファイルを作成して行1-32を入力します。 行1ではPythonのライブラリを取り込んでいます。 行3-10では関数「emoji_func()」を定義しています。 ここでは関数の引数に「*args, **kwargs」を指定しています。 行4-6では引数が「位置指定」のときの処理を行っています。 行8-10では引数が「キーワード指定」のときの処理を行っています。 forループで引数の各要素の「絵文字」と絵文字の「CLDR」を表示しています。

    行12-18では絵文字を定義しています。 行21-23では絵文字を「dict」型で定義しています。 行25-32では関数「emoji_func()」を呼び出しています。 関数の引数にはdict型の変数名を指定しています。 変数名の先頭に「**」を付加すると変数の内容をアンパック(unpack)します。 つまり、前出の項番4の指定と同じになります。
    import emoji    # pip install emoji
    
    def emoji_func(*args, **kwargs):
        # if args:
        for x in args:
            print(f"{x}  {emoji.demojize(x)}")         
    
        # if kwargs:
        for x in kwargs:
            print(f"{kwargs[x]}   {emoji.demojize(kwargs[x])}")
    
    fax = '📠'                  # :fax_machine:
    laptop = '💻'               # :laptop:
    desktop = '🖥️'              # :desktop_computer:
    printer = '🖨️'              # :printer:
    mouse = '🖱️'                # :computer_mouse:
    email = '📧'                # :e-mail:
    pencil = '✏'                # :pencil:
    
    # define emoji dict
    emoji_dict1 = {'laptop': '💻', 'desktop': '🖥️'}
    emoji_dict2 = {'desktop': '🖥️', 'printer': '🖨️', 'mouse': '🖱️', 'pencil': '✏'}
    emoji_dict3 = {'desktop': '🖥️', 'printer': '🖨️', 'mouse': '🖱️', 'fax': '📠', 'email': '📧'}
    
    print('-'*50, '↓ print(1) ↓')
    emoji_func(**emoji_dict1)
    
    print('-'*50, '↓ print(2) ↓')
    emoji_func(**emoji_dict2)
    
    print('-'*50, '↓ print(3) ↓')
    emoji_func(**emoji_dict3)

    click image to zoom!
    図6
    図6は実行結果です。 「絵文字」と絵文字の「CLDR」が表示されています。


Live DEMO

マウスをボックス内に移動すると緑の[▶]ボタンが表示されます。 このボタンをクリックするとPythonのコードを実行します。 Pythonのコードは編集してから実行することも可能です。