基本情報ではじめる Python (3) 引数 ~ Python の関数の引数には様々な形式がある


2021-07-05 更新

この連載では、プログラミングの入門者を対象として、基本情報技術者試験の出題範囲にテーマを絞って、 Python の言語構文とプログラムの読み方を説明します。

今回のテーマは、関数の引数の形式です。擬似言語の関数の引数には、 1 つの形式しかありませんが、 Python には、様々な形式があります。それぞれの特徴を、しっかりとマスターしてください。

擬似言語と同様の「位置引数」

以下は、引数の位置と設定された値を表示する my_func 関数の定義です。

1 つ目の引数が arg1 で、 2 つ目の引数が arg2 です。この記事では、関数の定義と、それを呼び出すプログラムを、 Python の対話モードで示します。

プログラムの説明としてコメントを付けている部分がありますが、実際にプログラムを動かすときには、コメントを付ける必要はありません。これ以降で示すプログラムでも、関数の名前は my_func であり、処理内容は引数の値を表示するだけです。どれも、様々な形式の引数を知るためのサンプルプログラムです。

infoお手元に Python の環境がない場合、ブラウザからオンラインで実行できる「 JupyterLab 」で、文中のコードをお試しください

info編集部注: スマートフォンでご覧の際は、プログラムや表は横スクロールすると全文をご覧になれます

code引数の位置と設定された値を表示する my_func 関数の定義
>>> def my_func(arg1, arg2):
...     print(f'1つ目の引数の値 = {arg1}')
...     print(f'2つ目の引数の値 = {arg2}')
...

以下は、 my_func 関数を呼び出すプログラムです。

code位置引数で my_func 関数を呼び出すプログラム
>>> my_func(123, 456)
1つ目の引数の値 = 123
2つ目の引数の値 = 456

1 つ目の引数の値に 123 を設定しているので、それが 1 つ目の引数の arg1 に渡されます。
2 つ目の引数の値に 456 を設定しているので、それが 2 つ目の引数の arg2 に渡されます。

このように、関数の定義における引数の位置と、関数を呼び出すときの引数の位置を対応させる形式を「位置引数」と呼びます。

 

擬似言語の関数の引数の形式には、位置引数しかありません。

Python には、位置引数の他にも、

  • キーワード引数
  • デフォルト引数
  • 可変長引数
  • 可変長キーワード引数

という形式があります。これ以降では、それぞれを順番に説明します。

位置に関係なく引数を設定できる「キーワード引数」

Python では、関数を呼び出すときに

引数名 = 値

と記述することができ、この形式を「キーワード引数」と呼びます。キーワード引数を使うと、関数の定義における引数の位置とは無関係に、それぞれの引数に値を設定できます。

以下は、引数名と設定された値を表示する関数の定義です。

code引数名と設定された値を表示する my_func 関数の定義
>>> def my_func(arg1, arg2):
...     print(f'arg1の値 = {arg1}')
...     print(f'arg2の値 = {arg2}')
...

以下は、 my_func 関数を呼び出すプログラムです。

codeキーワード引数で my_func 関数を呼び出すプログラム
>>> my_func(arg1=123, arg2=456)  # arg1、arg2の順に引数を設定する
arg1の値 = 123
arg2の値 = 456
>>> my_func(arg2=456, arg1=123)  # arg2、arg1の順に引数を設定する
arg1の値 = 123
arg2の値 = 456

my_func(arg1=123, arg2=456)と呼び出しても、 my_func(arg2=456, arg1=123)と呼び出しても、 arg1 には 123 が渡され、 arg2 には 456 が渡されます。引数が、位置ではなく引数名で識別されるからです。

引数の設定を省略できる「デフォルト引数」

関数の定義で、

引数名=デフォルト値

と記述すると、引数が設定されなかったときにデフォルト値が使われます。この形式を「デフォルト引数」と呼びます。

以下は、 arg1 のデフォルト値を 123 、 arg2 のデフォルト値を 456 とした my_func 関数の定義です。

codeデフォルト値を設定した my_func 関数の定義
>>> def my_func(arg1=123, arg2=456):
...     print(f'arg1の値 = {arg1}')
...     print(f'arg2の値 = {arg2}')
...

以下は、 my_func 関数を呼び出すプログラムです。

codeデフォルト引数で my_func 関数を呼び出すプログラム
>>> my_func()  # 引数を設定せずに呼び出す
arg1の値 = 123
arg2の値 = 456
>>> my_func(arg1=999)  # arg1だけを設定して呼び出す
arg1の値 = 999
arg2の値 = 456
>>> my_func(arg2=999)  # arg2だけを設定して呼び出す
arg1の値 = 123
arg2の値 = 999

引数を設定せずに my_func() と呼び出すと、 arg1 がデフォルト値の 123 になり、 arg2 がデフォルト値の 456 になります。
arg1 だけを設定して my_func(arg1=999)と呼び出すと、 arg1 は 999 になり、 arg2 がデフォルト値の 456 になります。
arg2 だけを設定して my_func(arg2=999)と呼び出すと、 arg1 はデフォルト値の 123 になり、 arg2 が 999 になります。

任意の数の引数を渡せる「可変長引数」

関数の定義で、引数に *(アスタリスク 1 個)を付けると、任意の数の引数を渡せる「可変長引数」になります。

可変長引数は、関数を呼び出す側で設定された複数の引数が、 1 つのタプルとして関数に渡されることで実現されます。

以下は、可変長引数に設定された値を表示する my_func 関数の定義です。 *args の部分が、可変長引数です。この args にタプルが渡されるので、 for 文で要素を 1 つずつ取り出して表示しています。

infoJupyterLab をお使いの場合、上のメニューから refresh リスタートして関数を入力ください

code可変長引数に設定された値を表示する my_func 関数の定義
>>> def my_func(*args):
...     for n in args:
...         print(n)

以下は、 my_func 関数を呼び出すプログラムです。

1 個の引数で my_func(123) と呼び出すことも、
2 個の引数で my_func(123, 456) と呼び出すことも、
3 個の引数で my_func(123, 456, 789) と呼び出すこともできます。

code可変長引数の my_func 関数を呼び出すプログラム
>>> my_func(123)  # 1個の引数で呼び出す
123
>>> my_func(123, 456)  # 2個の引数で呼び出す
123
456
>>> my_func(123, 456, 789)  # 3個の引数で呼び出す
123
456
789

任意の数のキーワード引数を渡せる「可変長キーワード引数」

関数の定義で、引数に **(アスタリスク 2 個)を付けると、任意の数のキーワード引数を渡せる「可変長キーワード引数」になります。

可変長引数は、関数を呼び出す側で設定された複数のキーワード引数が、 1 つの辞書として関数に渡されることで実現されます。キーワード引数の引数名が辞書のキーになり、引数の値が辞書のバリューになります。

以下は、可変長キーワード引数に設定された引数名と値を表示する my_func 関数の定義です。**kwargsの部分が、可変長キーワード引数です。この kwargs に辞書が渡されるので、 for 文で要素を 1 つずつ取り出してキー(引数名)とバリュー(値)表示しています。

code可変長キーワード引数に設定された引数名と値を表示する my_func 関数の定義
>>> def my_func(**kwargs):
...     for k in kwargs.keys():
...         print(f'{k}の値 = {kwargs[k]}')

以下は、 my_func 関数を呼び出すプログラムです。

1 個のキーワード引数で my_func(arg1=123) と呼び出すことも、
2 個のキーワード引数で my_func(arg1=123, arg2=456) と呼び出すことも、
3 個のキーワード引数で my_func(arg1=123, arg2=456, arg3=789) と呼び出すこともできます。

code可変長キーワード引数の my_func 関数を呼び出すプログラム
>>> my_func(arg1=123)  # 1個のキーワード引数で呼び出す
arg1の値 = 123
>>> my_func(arg1=123, arg2=456)  # 2個のキーワード引数で呼び出す
arg1の値 = 123
arg2の値 = 456
>>> my_func(arg1=123, arg2=456, arg3=789)  # 3個のキーワード引数で呼び出す
arg1の値 = 123
arg2の値 = 456
arg3の値 = 789

様々な形式の引数を混在させることもできる

これまでに説明した様々な形式の引数は、 1 つの関数で、混在させて使うこともできます。

たとえば、 Python の組み込み関数である print 関数の引数は、以下の形式になっています。

codeprint 関数の引数の形式
print(*object, sep=' ', end='\n', file=sys.stdout, flush=False)

先頭にある object が可変長引数で、その他の sep, end, file, flush は、デフォルト引数です。可変長引数とデフォルト引数が混在しています。

  • 引数 object には、画面に表示するオブジェクトを任意の数だけ設定します
  • 引数 sep には、画面に表示するオブジェクトを区切る文字列を設定します。デフォルト値は、半角スペース 1 個です
  • 引数 end には、すべてのオブジェクトを表示した後の末尾で表示する文字列を設定します。デフォルト値は、改行文字( \n )です
  • 引数 file には、出力先のファイルを設定します。デフォルト値は、標準出力( Windows ならコマンドプロンプトの画面)を意味する sys.stdout です
  • 引数 flush には、出力をバッファリング(すぐに出力せずに貯めておくこと)するかどうかを True または False で設定します。デフォルト値は、 False です

以下は、 print 関数を呼び出すプログラムです。

codeprint 関数を呼び出すプログラム
>>> print(123, 456, 789)  # 引数objectだけを設定する
123 456 789
>>> print(123, 456, 789, sep=',', end='')  # 引数sepとendも設定する
123,456,789>>>

引数 object だけを設定すると、オブジェクト(ここでは、 3 つの整数)が半角スペース 1 個で区切られて、画面に直ちに表示され、最後に改行されます。
引数 sep にカンマ( ',' )を設定し、引数 end に空文字列( '' )を設定すると、オブジェクトがカンマで区切られて表示され、最後に改行されません。

いかがでしたか。 Python の関数の引数に、様々な形式があることがわかったでしょう。

この連載では、今後も、基本情報技術者試験を Python で受けるための知識を取り上げて行きます。

それでは、またお会いしましょう!

 

label 関連タグ
Q. 午前試験を
『免除』するには?
A. 独習ゼミで午前免除制度を活用しましょう。
免除試験を受けた 87% の方が、
1 年間の午前免除資格を得ています。
2022 年 上期 試験向け
コース申込を開始!
最大 10 % OFF の早割も!
info_outline
2022 年 上期 試験向け
コース申込を開始!
最大 10 % OFF の早割も!
詳しく見てみるplay_circle_filled
label これまでの『基本情報ではじめるPython』の連載一覧 label 著者

『プログラムはなぜ動くのか』(日経BP)が大ベストセラー
IT技術を楽しく・分かりやすく教える“自称ソフトウェア芸人”

大手電気メーカーでPCの製造、ソフトハウスでプログラマを経験。独立後、現在はアプリケーションの開発と販売に従事。その傍ら、書籍・雑誌の執筆、またセミナー講師として活躍。軽快な口調で、知識0ベースのITエンジニアや一般書店フェアなどの一般的なPCユーザの講習ではダントツの評価。
お客様の満足を何よりも大切にし、わかりやすい、のせるのが上手い自称ソフトウェア芸人。

主な著作物

  • 「プログラムはなぜ動くのか」(日経BP)
  • 「コンピュータはなぜ動くのか」(日経BP)
  • 「出るとこだけ! 基本情報技術者」 (翔泳社)
  • 「ベテランが丁寧に教えてくれる ハードウェアの知識と実務」(翔泳社)
  • 「ifとelseの思考術」(ソフトバンククリエイティブ) など多数