Pythonで関数を学んでいる中で、「仮引数」「実引数」「位置引数」「キーワード引数」など引数に関する言葉がよく登場します。
それぞれ意味や使い方が異なり、初心者には混乱しがちです。
そこで、自分の理解を整理するために、具体例とともにそれぞれの違いをまとめてみました。
仮引数(parameter)
関数を定義する側で使う変数名です。
この時点では値は決まっておらず、名前だけが決まっている状態です。
def greet(name): # ← ここが仮引数
print("Hello, " + name)
実引数(argument)
関数を呼び出すときに渡す具体的な値のことです。
関数に「これを処理して」と渡すデータです。
greet("Alice") # ← ここが実引数
位置引数(positional argument)
引数の順番が意味を持つ渡し方です。
定義された順番に対応して値が渡されます。
def introduce(name, age):
print(f"My name is {name}, I'm {age} years old.")
introduce("Bob", 25)
キーワード引数(keyword argument)
引数名を明示して値を渡す方法です。
順番を入れ替えても問題なく、可読性が上がります。
introduce(age=30, name="Charlie")
位置引数とキーワード引数の併用
位置引数のあとにキーワード引数を使うことで、柔軟に関数を呼び出せます。
introduce("Diana", age=22) # OK
ただし、キーワード引数を先に書くとエラーになります。
introduce(age=22, "Diana") # ❌ SyntaxError
デフォルト引数(default argument)
関数を定義するときに、あらかじめ値を設定しておける引数です。
呼び出し時にその引数が省略された場合、デフォルト値が使われます。
def greet(name="Guest"):
print("Hello, " + name)
greet() # → Hello, Guest
greet("Erika") # → Hello, Erika
🔸 ポイント
- 引数を渡さなかったとき → デフォルト値が使われる
- 引数を渡したとき → 渡した値が使われ、デフォルト値は無視される
可変長引数(variable-length argument)
関数に引数をいくつでも渡せるようにする仕組みです。
主に次の2種類があります。
*args(複数の位置引数を受け取る)
*args
を使うと、複数の位置引数を1つのタプルとして受け取れます。
def show_colors(*args):
for color in args:
print(color)
show_colors("red", "green", "blue")
実行結果:
red
green
blue
**kwargs(複数のキーワード引数を受け取る)
**kwargs
を使うと、複数のキーワード引数を1つの辞書として受け取れます。
def show_prices(**kwargs):
for item, price in kwargs.items():
print(f"{item}: {price} yen")
show_prices(apple=120, banana=80, orange=100)
実行結果:
apple: 120 yen
banana: 80 yen
orange: 100 yen
🔸 ポイント
-
*args
は「いくつ渡してもOKな位置引数」 -
**kwargs
は「いくつ渡してもOKなキーワード引数」 -
*args
→ タプルで受け取る -
**kwargs
→ 辞書で受け取る
まとめ(比較表)
用語 | 意味 | 例 |
---|---|---|
仮引数 | 関数定義時に使う変数名 |
def func(x): の x
|
実引数 | 関数呼び出し時に渡す具体的な値 |
func(10) の 10
|
位置引数 | 順番どおりに渡す実引数 | func("A", "B") |
キーワード引数 | 名前付きで渡す実引数 | func(x="A", y="B") |
デフォルト引数 | 渡されなかったときに使われる値 |
def func(x=10): の 10
|
可変長引数(*args) | 任意の数の位置引数をタプルで受け取る | def func(*args): |
可変長引数(**kwargs) | 任意の数のキーワード引数を辞書で受け取る | def func(**kwargs): |
おわりに
引数にはいくつか種類がありますが、それぞれの違いを理解しておくと、関数を柔軟に使いこなせるようになると思いました。
実際にいくつかのパターンを書いてみて、挙動を確かめながら覚えていきます。