Python 関数引数完全マスター: 位置引数・キーワード引数・デフォルト引数
Python 関数引数をマスターする
デフォルト値、キーワード、任意引数を使って、可変個の引数を受け取る関数を設計する方法を学び、よりクリーンで適応性の高いコードを書きます。
動画: Python関数引数: 位置、キーワード、デフォルト
引数
ユーザー定義関数トピックで関数定義と呼び出しを扱いました。期待されるシグネチャと合わない呼び出しはエラーを発生させます。例:
def greet(name, msg):
"""This function greets the person with the provided message."""
print("Hello", name + ", " + msg)
greet("Monica", "Good morning!")
出力
Hello Monica, Good morning!
greet()関数は2つのパラメータを受け取ります。正しい引数数で呼べばスムーズに動作;そうでなければインタプリタが明確なメッセージでTypeErrorを出します。
>>> greet("Monica") # 引数1つのみ
TypeError: greet() missing 1 required positional argument: 'msg'
>>> greet() # 引数なし TypeError: greet() missing 2 required positional arguments: 'name' and 'msg'
可変引数
Pythonは可変数の引数を受け取る柔軟な方法を提供します。以下に3つの一般的パターンを解説。
Python デフォルト引数
パラメータに代入演算子(=)でデフォルト値を与えられます。以下例ではオプションメッセージが「Good morning!」にデフォルト:
def greet(name, msg="Good morning!"):
"""
This function greets the person with the provided message.
If the message is not supplied, it defaults to "Good morning!".
"""
print("Hello", name + ", " + msg)
greet("Kate")
greet("Bruce", "How do you do?")
出力
Hello Kate, Good morning! Hello Bruce, How do you do?
この定義ではnameは必須、msgはオプション。デフォルト引数がある場合、以降のすべてのパラメータもデフォルトを持つ必要があります。そうでなければSyntaxError。例:
def greet(msg = "Good morning!", name): pass
SyntaxError: non-default argument follows default argument
Python キーワード引数
Pythonでは呼び出し側が引数を名前で指定でき、位置順の柔軟性を得られます。同じgreet()を以下のように呼べます:
# キーワード引数2つ
greet(name = "Bruce", msg = "How do you do?")
# キーワード引数2つ(順序不同)
greet(msg = "How do you do?", name = "Bruce")
# 位置引数1つ、キーワード引数1つ
greet("Bruce", msg = "How do you do?")
位置引数とキーワード引数の混在は、すべての位置引数がキーワード引数より前にある場合のみ許可;そうでなければSyntaxError。
greet(name="Bruce","How do you do?")
SyntaxError: non-keyword arg after keyword arg
Python 任意引数
設計時に引数数が不明な場合、アスタリスク(*)でタプルとして捕捉:
def greet(*names):
"""Greets each name in the supplied tuple."""
for name in names:
print("Hello", name)
greet("Monica", "Luke", "Steve", "John")
出力
Hello Monica Hello Luke Hello Steve Hello John
関数内ではnamesは渡されたすべての引数を含むタプルになり、イテレーションや必要な処理が可能。
Python
- Python データ型マスター: 実践ガイド
- Python 演算子完全マスター: 包括的ガイド
- Python pass文完全マスター: 実践ガイド
- Python ラムダ関数: 無名関数の実践ガイド
- Python辞書完全ガイド:作成、操作、高度なテクニック
- Pythonジェネレータ:効率的イテレーションと高度なユースケース
- Pythonクロージャ解説:ネスト関数が変数を捕捉する仕組み
- Pythonデコレータマスター:エキスパート技法で関数を拡張
- Python strip()メソッド完全ガイド:実践例付き
- Pythonラムダ関数をマスターする:実例とベストプラクティス
- Python abs()関数:数値と複素数の絶対値を計算