#[Python]<補足>06章-05 引数と戻り値4
06章-04で関数における引数がリストだった場合について説明しました。
そのほかのデータ構造である、タプルやディクショナリを引数として受け取るもできます。今回はタプルとディクショナリを引数として受け取ることについて取り扱いたいと思います。
なお、この節は<補足>としていますので、時間のない方は読み飛ばしていただいても構いません。なお、基本情報技術者試験では今後タプルやディクショナリの引数の扱いをするといった問題も出題されることが予測されるため、目を通しておきましょう。
##任意の数の引数~タプルで受け取る~
関数を呼び出す際に、実引数と仮引数の数は以下のプログラムのように一致させないといけません。chap06の中に、samp06-05-01.pyというファイル名でファイルを作成し、以下のコードを書いてください。
def called_func(x, y, z):
print('関数内で実行しています。')
print(x, y, z)
#called_func(2) #←引数の数が一致していないので、関数を呼び出すとエラーとなります
called_func(4, -1, 2)
【実行結果】
関数内で実行しています。
4 -1 2
最初の関数の呼び出し**called_func(2)**では実引数の数が1個ですが、仮引数の数は3つとなっており、一致していません。そのため、このコメントを外すとエラーとなります。
次に呼び出している**called_func(4, -1, 2)**では、実引数と仮引数の数が一致しているため、呼び出すことができます。
しかし、Pythonの関数では、任意の数の引数を受け取ることができるのです。それが以下の方法です。先ほど書いたプログラムsamp06-05-01.pyを修正して、以下のコードを書いてください。
def called_func(*args):
print('関数内で実行しています。')
print(args)
called_func(2) #←今度は呼び出せます
called_func(4, -1, 2)
【実行結果】
関数内で実行しています。
(2,)
関数内で実行しています。
(4, -1, 2)
仮引数に*(アスタリスク)を付けると、タプルとして受け取っていることがわかります。
なお、関数内で***argsの中身を出力していますが、出力する際には*は不要です。また*args**という仮引数名を使用していますが、実際は何でも構いません。ただし、ほとんどの方が(慣習的に)argsを使用しています。
※argsはargumentの略では引数という意味です。
##任意の数のキーワード引数~ディクショナリの受け取り~
06章-03でキーワード引数について取り扱いました。実はこのキーワード引数を実引数で指定し、仮引数でまとめて任意の数を受け取ることができます。
chap06の中に、samp06-05-02.pyというファイル名でファイルを作成し、以下のコードを書いてください。
def called_func(**kwargs):
print('関数内で実行しています。')
print(kwargs)
called_func(x=1, y=2, z=3)
【実行結果】
関数内で実行しています。
{'x': 1, 'y': 2, 'z': 3}
実引数にキーワード引数を、仮引数に**(アスタリスク2つ)を付けると、ディクショナリとして受け取っていることがわかります。
なお、関数内で****kwargsの中身を出力していますが、出力する際には**は不要です。また**kwargsという仮引数名を使用していますが、実際は何でも構いません。ただし、ほとんどの方が(慣習的に)**kwargs**を使用しています。
##最後に
引数の受け取り方は多種ありますので、押さえておきましょう。タプルやディクショナリとして受け取るといったケースは見かける機会はあまりないですが、こういったこともできるということは把握しておいてください。ただし、情報処理技術者試験では出題される可能性はありますので注意しましょう。
###【目次リンク】へ戻る