1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonの星印式(*, **)の解説

Posted at

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学習の一助となれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?