Pythonの星印式(*, **)は、関数に可変長引数を与えるための強力なメカニズムです。初学者にとっては少し複雑に感じるかもしれませんが、一度理解すれば、Pythonプログラミングの幅が広がります。
単一のアスタリスク(*)
-
イテラブルオブジェクトの展開: リスト、タプル、文字列などのイテラブルオブジェクトを、個々の要素に展開します。
numbers = [1, 2, 3] print(*numbers) # 出力: 1 2 3
-
任意個数の位置引数: 関数定義で*argsとすると、任意個の位置引数をタプルとして受け取ることができます。
def my_sum(*args): return sum(args) result = my_sum(1, 2, 3, 4) # 出力: 10
-
タプルアンパッキング: タプルを複数の変数にアンパッキングできます。
a, *b, c = (1, 2, 3, 4) # a=1, b=[2, 3], c=4
ダブルアスタリスク(**)
-
辞書の展開: 辞書をキーワード引数として展開します。
d = {'x': 1, 'y': 2} print(**d) # 出力: x=1 y=2
-
任意個数のキーワード引数: 関数定義で**kwargsとすると、任意個のキーワード引数を辞書として受け取ることができます。
def my_func(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}") my_func(a=1, b=2, c=3)
まとめ
- *args: 任意個の位置引数をタプルとして受け取る
- kwargs: 任意個のキーワード引数を辞書として受け取る
これらの仕組みを組み合わせることで、非常に柔軟な関数を作成することができます。
深掘り
- リスト内包表記: *を使ってネストされたリストを平坦化できます。
- ジェネレータ式: *をジェネレータ式で使うこともできます。
- 関数呼び出し時の:* 関数呼び出し時に、リストやタプルを展開して引数として渡すことができます。
注意事項
- *argsと**kwargsは慣習的な名前であり、他の名前でも使用できます。
- *argsは**kwargsの前に置く必要があります。
- 過度な使用はコードの可読性を低下させる可能性があります。
例題
def my_func(*args, **kwargs):
print(args)
print(kwargs)
my_func(1, 2, 3, a=10, b=20)
出力:
(1, 2, 3)
{'a': 10, 'b': 20}
まとめ
Pythonの星印式は、関数に柔軟性を与える強力なツールです。この概念を理解することで、より高度なPythonプログラミングが可能になります。
この翻訳が、あなたのPython学習の一助となれば幸いです。