7.1 関数のすべての引数を取得する
Pythonには、関数内から渡されたすべてのパラメータのリストを取得するための便利な方法がいくつかあります。さあ、それを見ていきましょう。
*args
の使用法
*args
は、関数に変数数の位置(通常)の引数を渡すことを可能にします。これらの引数はタプルにパックされ、関数内で処理できます。
def print_numbers(*args):
for arg in args:
print(arg)
print_numbers(1, 2, 3, 4, 5)
説明
関数print_numbers
は、タプルargs
にパックされた任意の数の位置引数を受け取ります。関数内でfor
ループを使って引数を反復処理できます。
利点
- 柔軟性: 任意の数の引数を関数に渡すことができます。
- 汎用性: パラメータ数が不定の関数に使用できます。
**kwargs
の使用法
**kwargs
は、関数に変数数の名付けられた引数を渡すことを可能にします。これらの引数は辞書にパックされ、関数内で処理できます。
def print_person_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_person_info(name="Alice", age=30, city="New York")
説明
関数print_person_info
は辞書kwargs
にパックされた任意の数の名付けられた引数を受け取ります。辞書のitems()
メソッドを使って引数を反復処理できます。
利点
- 柔軟性: 任意の数の名付けられた引数を関数に渡すことができます。
- 読みやすさ: 名付けられた引数は関数の呼び出しをより読みやすくします。
7.2 引数の型を固定する
位置引数のみ
Python 3.8以降では、位置指定によってのみ渡すことができる位置引数を持つ関数を定義できます。これは、関数定義で/
記号を使って行います。
def greet(name, /, greeting="Hello"):
print(f"{greeting}, {name}!")
greet("Alice") # 出力: Hello, Alice!
greet("Alice", greeting="Hi") # 出力: Hi, Alice!
# greet(name="Alice") # エラー: TypeError
説明
関数greet
は、位置指定でのみ渡すことができるname
引数を受け取ります。引数
/より前の
引数は位置指定のみ可能です。
こうしたアプローチは、引数の渡し方を制限し、可読性を向上させ、エラーを防ぎます。
名付けられた引数のみ(Keyword-Only Arguments)
また、名前でのみ渡すことができる関数のパラメータを定義することもできます。これは、関数定義で*
記号を使って行います。
def greet(*, name, greeting="Hello"):
print(f"{greeting}, {name}!")
greet(name="Alice") # 出力: Hello, Alice!
greet(name="Alice", greeting="Hi") # 出力: Hi, Alice!
# greet("Alice") # エラー: TypeError
関数greet
は、名前でのみ渡すことができるname
引数を受け取ります。引数
*の後
引数は名前でのみ渡せます。
このアプローチは、引数の名前を明示的に指定することを強制し、コードの可読性を向上させます。
位置引数と名付けられた引数の組み合わせ
また、最大限の柔軟性を得るために、位置引数と名前付き引数を組み合わせることができます。
def greet(name, /, *, greeting="Hello"):
print(f"{greeting}, {name}!")
greet("Alice") # 出力: Hello, Alice!
greet("Alice", greeting="Hi") # 出力: Hi, Alice!
# greet(name="Alice") # エラー: TypeError
関数greet
は、位置指定でのみ渡すことができるname
引数を受け取り、名前付き引数greeting
も必ず名前を指定して渡す必要があります。/
と*
を使用することで、位置引数と名前付き引数の組み合わせが可能です。
すべての状況の完全な例:
def full_example(a, b, /, c, d, *, e, f):
print(f"a={a}, b={b}, c={c}, d={d}, e={e}, f={f}")
# 様々な引数での関数呼び出し
full_example(1, 2, 3, 4, e=5, f=6) # すべての引数が正しく渡されました
# full_example(a=1, b=2, c=3, d=4, e=5, f=6) # エラー: TypeError
説明
-
位置指定のみの引数:
a
とb
は位置指定でのみ渡せます。 -
通常の位置または名付けられた引数:
c
とd
は位置または名前で渡せます。 -
名前付きのみの引数:
e
とf
は名前でのみ渡せます。
GO TO FULL VERSION