Pythonの引数の使い方!デフォルト引数・可変長引数・キーワード引数の違い
生徒
「Pythonで関数に値を渡すときって、いろいろな書き方があるみたいですが、よくわからなくて……」
先生
「いいですね、関数の引数はPythonの基本の中でもとても大切なところです。デフォルト引数・可変長引数・キーワード引数など、いろんな書き方がありますよ。」
生徒
「それぞれどう違うんですか? 使い分けも教えてほしいです!」
先生
「もちろんです!順番に分かりやすく説明していきましょう。」
1. Pythonの関数と引数とは?
Pythonでは、関数(function)を使うことで、よく使う処理をまとめて何度でも使い回すことができます。関数に渡すデータのことを「引数(ひきすう)」と呼びます。
例えば、「名前を表示する関数」を作るとき、名前を引数として受け取ることで、いろいろな人の名前を表示できます。
def greet(name):
print("こんにちは、" + name + "さん!")
greet("たろう")
こんにちは、たろうさん!
2. デフォルト引数:引数にあらかじめ値を設定する
デフォルト引数とは、関数の引数に「最初から決められた値(初期値)」を設定しておく方法です。引数を省略した場合でも、設定された値が使われるので便利です。
def greet(name="ゲスト"):
print("こんにちは、" + name + "さん!")
greet()
greet("さくら")
こんにちは、ゲストさん!
こんにちは、さくらさん!
このように、引数を渡さなかった場合は「ゲスト」が使われ、渡した場合はその値が優先されます。
3. 可変長引数:引数の数が決まっていない場合に使う
可変長引数(かへんちょうひきすう)は、引数の数が決まっていないときに使う方法です。*(アスタリスク)を使うことで、いくつでも引数を受け取ることができます。
def show_fruits(*fruits):
for fruit in fruits:
print("フルーツ:", fruit)
show_fruits("りんご", "バナナ", "みかん")
フルーツ: りんご
フルーツ: バナナ
フルーツ: みかん
*fruitsは、受け取った複数の値をまとめてタプル(カンマ区切りのデータ)として扱います。
4. キーワード引数:引数名を指定して渡す
キーワード引数は、引数の名前を指定して値を渡す方法です。どの引数に何の値を渡しているかが分かりやすくなります。
def introduce(name, age):
print(name + "さんは" + str(age) + "歳です。")
introduce(name="たろう", age=25)
introduce(age=30, name="はなこ")
たろうさんは25歳です。
はなこさんは30歳です。
このように、引数の順番を気にせずに渡すことができるのも特徴です。
5. キーワード可変長引数:名前付きの引数を自由に受け取る
さらに柔軟に対応したいときには、キーワード可変長引数が便利です。**(アスタリスク2つ)を使うことで、「名前=値」の形式でいくつでも引数を受け取れます。
def show_profile(**info):
for key, value in info.items():
print(key + ":", value)
show_profile(name="たろう", age=22, hobby="ゲーム")
name: たろう
age: 22
hobby: ゲーム
**infoは、受け取った値を辞書(キーと値のペア)として扱います。
6. 引数の順番と組み合わせに注意しよう
Pythonでは、引数を複数組み合わせて使うことができます。ただし、次の順番で定義する必要があります。
- 通常の引数
- デフォルト引数
- 可変長引数(
*args) - キーワード可変長引数(
**kwargs)
def example(a, b=1, *args, **kwargs):
print("a:", a)
print("b:", b)
print("args:", args)
print("kwargs:", kwargs)
example(10, 20, 30, 40, name="たろう", age=25)
a: 10
b: 20
args: (30, 40)
kwargs: {'name': 'たろう', 'age': 25}
このように、引数の型ごとにきちんと順番を守ることで、エラーを避けることができます。