【Python】引数の種類と機能(位置引数、デフォルト引数、キーワード引数、引数の強制)
2020.12.30 /
Pythonだけでなく、どのプログラミング言語でも引数は使用されます。
プログラミング経験者であれば、なんとなく引数を使ってPythonでプログラムを作成できると思います。
しかしなんとなくではなく、しっかり理解して引数を使えると、Pythonでのプログラミングの幅が広がります。
本記事では、Pythonにおける引数について(種類や機能)詳しく説明していきます。
Pythonにおける引数
引数とは
引数(argument)とは、関数に渡される値のことです。
基本的に関数は、入力を受け処理を実行し、最後に結果を出力します。
関数の実行には「入力」、「処理」、「出力」が必要となりますが、引数はここでいう「入力」に使用されます。
では、以下サンプルプログラムを見てください。
# sample.py
office = "引数を入力"
print(office)
# 引数を入力"
上記サンプルプログラムでは、print()関数に入力として、引数officeを渡しています。
このように引数は、関数に値を渡すために使用されます。
引数の値渡し
プログラム言語には、関数に引数を渡す方法として「値渡し」と「参照渡し」があります。
値渡しとは、変数の値を渡す方法であり、関数内で渡された値を変更しても、元の変数には影響が一切ありません。
参照渡しとは、変数の住所(所在)情報を渡す方法であり、関数内で値を変更すると、元の変数にも影響されます。
どちらの方式もサポートしているプログラム言語はありますが、
Pythonで使用される方式は「値渡し」のみです。
Pythonで引数が「参照渡し」されることはないです。
Pythonで使われる引数
Pythonでは基本的に「位置引数」と「デフォルト引数」、「キーワード引数」が使われます。
その他に「可変長引数」があります。
あまり利用される場面は多くありませんが、プログラム作成していると必要なシーンが出てくることがあります。
可変長引数については、以下記事をご参照ください。
【Python】複数の引数を受け取る可変長引数:*argsと**kwargsの使い方
引数の機能説明
位置引数
位置引数とは、
引数の位置で順番に値が渡される引数の指定方法です。
次のようにmalti_args関数があるとします。
def malti_args(x, y):
print(x)
print(y)
そして次のようにmalti_args関数を実行(呼び出し)すると、"引数1"はxへ、"引数2"はyに渡されます。
malti_args("引数1", "引数2")
# 引数1
# 引数2
このように位置引数は、引数を位置で指定しています。
デフォルト引数
関数でデフォルトの引数を設定できます。その引数をデフォルト引数と呼びます。
デフォルト引数を設定することで、関数呼び出し時に引数が省略されていた場合、デフォルト引数の値が使用されます。
# sample.py
def malti_args(x, y="引数2"):
print(x)
print(y)
malti_args("引数1")
# 引数1
# 引数2
デフォルト引数の注意点として、
デフォルト引数にミュータブルなデータ(リストや辞書)を使った場合、値が継続(キャッシュ)して使われてしまいます。
def default_args(x=[]):
x.append(54)
print(x)
default_args()
default_args()
# [54]
# [54, 54]
上記サンプルプログラムでわかるように、最初の呼び出し時に追加された値が、二回目の呼び出し時にも残っています。
そのためデフォルト引数の値には、イミュータブル(タプルや文字列、数値)なデータを使うことがお勧めです。
キーワード引数
キーワード引数とは、
引数に名前(キーワード)を付ける引数の指定方式です。
位置引数では順番で関数に定義した引数のどれにあたるかがわかりましたが、キーワード引数を使えば、一目でどの引数に値が渡されるかがわかります。
次のようにmalti_args関数があるとします。
def malti_args(x, y):
print(x)
print(y)
キーワード引数を使うと次のようにして、関数を呼び出せます。
malti_args(y="引数2", x="引数1")
このようにどれが関数の引数に値を渡すかがわかりますし、引数の順番も変更できます。
引数の強制指定
位置引数の強制
関数を呼び出すときの引数を位置引数で強制させる「Positional only parameters」という機能があります。
Python3.8以降で使えます。
位置引数の強制には「/」を使います。
「/」より前の引数は位置引数である必要があります。
次のようにmalti_args関数があるとします。
def malti_args(x, /, y):
print(x)
print(y)
この場合、xは位置引数である必要があります。
そのため
malti_args(x=54, y=54)
ではエラーが表示されます。
キーワード引数の強制
関数を呼び出すときの引数をキーワード引数で強制させる「Keyword only argument」という機能があります。
位置引数の強制には「*」を使います。
「*」より後の引数はキーワード引数である必要があります。
次のようにmalti_args関数があるとします。
def malti_args(x, *, y):
print(x)
print(y)
この場合、yはキーワード引数である必要があります。
そのため
malti_args(x=54, 54)
ではエラーが表示されます。
まとめ
Pythonにおける引数について(種類や機能)はいかがでしたか。
Pythonには様々な引数があるので、一つずつ実際に使って覚えていきましょう。