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]をクリックします。
画像の任意の場所をクリックして閉じることもできます。
Python関数の引数(*args, **kwargs)の使い方
-
関数の引数を位置指定形式で定義する
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('🥵','🤐','😎')
図1は実行結果です。
「絵文字」と絵文字の「CLDR」が表示されています。
-
関数の引数をキーワード指定形式で定義する
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='🖱️')
図2は実行結果です。
「絵文字」と絵文字の「CLDR」が表示されています。
-
関数の引数を「*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)
図3は実行結果です。
「絵文字」と絵文字の「CLDR」が表示されています。
-
関数の引数を「**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 = '✏')
図4は実行結果です。
「絵文字」と絵文字の「CLDR」が表示されています。
-
関数(*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)
図5は実行結果です。
「絵文字」と絵文字の「CLDR」が表示されています。
-
関数(**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)
図6は実行結果です。
「絵文字」と絵文字の「CLDR」が表示されています。