どうも!リョクちゃです。
今回は、関数に渡す引数について紹介していきます。
前回は関数の書き方・作り方について紹介しました。
Pythonにおける関数は、defで定義することで作ることができましたね。
ちなみに前回の記事はこちら
目次
引数とは……?
関数やメソッドを呼び出すときに渡す値のことを指します。
引数(ひきすう)と読まれ、関数外部との値のやり取りができることから、
特別な変数として扱われます。
ちなみに英語では、argumentと書かれます。
引数の種類
Pythonでは、主に以下に示す引数があります。
- 可変長引数
- デフォルト引数
- キーワード引数
これらについて順に解説していきます。
可変長引数(かへんちょうひきすう)
可変長引数は、関数へ渡したい値が固定ではないときに利用ができます。
たとえば、配列やリストのように中身が固定ではない値を渡すときに使用できます。
では、実際に可変長引数を関数に与える場合の書き方を下に示します。
1 2 3 4 5 6 7 8 9 10 11 12 |
# 可変長引数 def person(msg, *names): for name in names: print("私は" + name + "です。" + msg) person("こんにちは", "トム", "ボブ", "田中") # 出力(実行すると) # 私はトムです。こんにちは # 私はボブです。こんにちは # 私は田中です。こんにちは |
関数personの引数*namesに注目してください。
よく見ると引数の先頭に*(アスタリスク)が付いています。
そうです、これが可変長引数を表すのです。
そして可変長引数は、引数の中でも必ず最後に記述します。
そうでない場合、エラーとなってしまいます。
順番を逆にした場合、下に示すようなエラーが出ます。
1 2 3 4 5 6 7 8 9 10 11 |
# 可変長引数 def person(*names, msg ): for name in names: print("私は" + name + "です。" + msg) person("トム", "ボブ", "田中", "こんにちは") # 例外が発生しました: TypeError # person() missing 1 required keyword-only argument: 'msg' # File "pYTHONファイル名", エラー発生行数, in <module> # person("トム", "ボブ", "田中", "こんにちは") |
引数として設定した、*namesは以下の図の部分に当てはまります。
ちなみに……
*(アスタリスク)を2個つけることで、辞書型専用の可変長引数にすることができます。
以下、例を示します。
1 2 3 4 5 6 7 |
# 可変長引数 (辞書型専用) def people(**people): for name, msg in people.items(): print("私は" + name + "です。" + msg) people(Tom="はじめまして", Bob="こんにちは", TANAKA="よろしくお願いします") |
こんなイメージになります。
可変長引数は使えるようになったら便利なので、覚えてください。
デフォルト引数
関数の引数に初期値が与えてある引数をデフォルト引数といいます。
VB.Netでいえば、引数を割り当てる際のOptional Byval <変数名> as <型名> = <初期値>
のイメージです。
下に例を示します。
1 2 3 4 5 |
def hello(msg="こんにちは", target="World"): print(msg + " " + target) hello() |
下のようなイメージになります。
あらかじめ関数に渡した引数に値が代入されている変数をデフォルト引数といいます。
一方で、
1 2 3 4 5 6 |
def hello(msg = “こんにちは”, target = “World”): print(msg + “ ” + target) hello() #関数の呼び出し hello(“はじめまして”,”赤ちゃん”) #関数の呼び出し hello(“good morning”) #関数の呼び出し |
これを実行すると、
こんにちは World
はじめまして 赤ちゃん
good morning World
とそれぞれ出力がされます。
デフォルト引数は、デフォルト値がない引数よりも後に記述をしなくてはいけません。
Pythonでは、引数とパラメータ位置を基準に対応付けがされているからです。
コードで書くと、下のようになります。
1 2 |
def hello(arg1, arg2=“Hello”,arg3=“World”) print(arg1 + “ ” + arg2 + “ ” + arg3) |
キーワード引数
関数の引数として定義された単語(変数)をキーワード引数といいます。
キーワード引数を指定して、値を割り当てることができます。
イメージを参考に使うと、下のようになります。
それぞれ説明すると、
このようになります。
まとめ
<可変長引数>
変数の前に*もしくは**を付けて宣言する。
*で配列やリスト
**で辞書
<デフォルト引数>
関数の引数に初期値が与えてある引数
<キーワード引数>
関数の引数として定義された変数を
Pythonのデフォルト引数とキーワード渡しの組み合わせは非常に便利。
引数には順番があります。
- 引数
- キーワード引数(orデフォルト引数)
- 可変長引数
この順番でないと、エラーが起きてしまうので注意!!