Pythonでプログラミングを始めると、すぐに登場するのが「関数」と「引数」です。
関数にデータを渡して処理するための仕組みが引数であり、柔軟なコードを書くために欠かせない要素です。
本記事では、Pythonの関数における引数の基本から、デフォルト引数、可変長引数、キーワード引数、アンパックなど、さまざまな使い方までを丁寧に解説します。
初心者にもわかりやすく例を交えて説明するので、これを読めば「引数って結局どう使えばいいの?」という疑問が解消されるはずです。
Pythonでは関数をdef
キーワードで定義します。引数とは、関数を呼び出すときに渡す「値」のことです。
def greet(name):
print(f"こんにちは、{name}さん!")
greet("太郎") # こんにちは、太郎さん!
上記のように、name
という引数に「太郎」という値を渡すことで、関数内の処理が動作します。引数は関数内でローカル変数として使えます。
引数にデフォルト値を設定することで、呼び出し時に値を省略できるようになります。
def greet(name="ゲスト"):
print(f"こんにちは、{name}さん!")
greet() # こんにちは、ゲストさん!
greet("花子") # こんにちは、花子さん!
このように、値を渡さなければ"ゲスト"
が使われ、渡せばその値に置き換わります。
よく使う引数にはデフォルトを設定しておくと、使い勝手が良くなります。
引数をキーワード付きで指定すると、順番を気にせず渡すことができます。
def profile(name, age, city):
print(f"{name}さんは{age}歳で、{city}に住んでいます。")
profile(age=30, city="東京", name="健一")
順序がバラバラでも、キーワードをつけることで正しく渡されます。
関数に多くの引数があるときに、間違いを減らせる便利な方法です。
Pythonでは、引数の数が可変な関数も定義できます。
def show_items(*args):
for item in args:
print(f"アイテム: {item}")
show_items("りんご", "バナナ", "みかん")
このように、*args
は複数の引数をタプルとして受け取ります。
def show_profile(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
show_profile(name="花子", age=25, city="大阪")
**kwargs
はキーワード引数を辞書として受け取る形です。
逆に、リストや辞書の内容を関数に渡すときにも*
や**
を使って展開できます。
def add(a, b, c):
print(a + b + c)
values = [1, 2, 3]
add(*values) # 6
def describe(name, age):
print(f"{name}さんは{age}歳です。")
info = {"name": "次郎", "age": 28}
describe(**info)
このように、すでにあるデータ構造を関数に渡すときに便利です。
関数を定義するとき、引数の並び順にはルールがあります。
(位置引数, デフォルト引数, *args, キーワード専用引数, **kwargs)
例えば、以下は正しい例です:
def sample(a, b=10, *args, c, **kwargs):
pass
この順番を守らないと、構文エラーになります。キーワード専用引数(Python 3.8以降の*
以降の引数)は特に注意が必要です。
def greet(name):
print(f"こんにちは、{name}さん!")
greet() # TypeError: greet() missing 1 required positional argument: 'name'
→ デフォルト引数を使うか、呼び出し時に値を忘れずに渡しましょう。
def greet(name):
print(f"こんにちは、{name}さん!")
greet(username="花子") # TypeError: greet() got an unexpected keyword argument 'username'
→ 関数が受け取れる引数名と一致しているか確認すること。
def log(message, level="INFO", *, timestamp=True):
from datetime import datetime
if timestamp:
print(f"{datetime.now()} [{level}] {message}")
else:
print(f"[{level}] {message}")
log("アプリケーションが起動しました")
log("エラーが発生しました", level="ERROR", timestamp=False)
キーワード専用引数(*
以降)を使うことで、柔軟かつ安全な引数指定ができます。
Pythonの引数は単なる「データ渡し」にとどまらず、プログラムの柔軟性と読みやすさを高める大切な構文です。
基本の位置引数やデフォルト引数に始まり、キーワード引数や可変長引数、アンパックといった応用まで、知っておくことでコードの幅が一気に広がります。
Pythonに慣れてくると、引数の設計がそのまま関数の使いやすさに直結することがわかってきます。ぜひ、実際のコードで今日学んだことを試してみてください。