Python
 Computer >> コンピューター >  >> プログラミング >> Python

【初心者向け】Pythonの*argsと**kwargsの使い方をわかりやすく解説

*argsとは?

Pythonでは、アスタリスク1つ(*)を付けた*argsを関数の仮引数として定義することで、キーワードなしの可変長引数(位置引数)を任意の個数だけ受け取れるようになります。ここで重要なのはアスタリスク(*)の部分であり、「args」という名前自体に特別な意味はありません。あくまで慣習的に使われる名前で、たとえば「*numbers」のように別の名前でも同じように動作します。

*argsを使うと、関数呼び出し時に渡された複数の位置引数はタプル(tuple)としてまとめられ、関数内でそのタプルに対して繰り返し処理などを行えます。

*argsの使用例

次のコードは、渡されたすべての数値を掛け合わせて表示する関数の例です。

def multiply(*args):
    y = 1
    for i in args:
        y = y * i
    print(y)

multiply(3, 4)
multiply(10, 8)
multiply(2, 5, 6)
multiply(4, 5, 10, 9)

出力結果

12
80
60
1800

このように、呼び出しごとに引数の個数が異なっていても、同じ1つの関数で柔軟に対応できるのが*argsの利点です。

**kwargsとは?

一方、アスタリスク2つ(**)を付けた**kwargsは、キーワード付きの可変長引数を辞書(dict)として受け取るために使います。こちらも重要なのは「**」の部分で、「kwargs」という名前は単なる慣習にすぎません。

関数に渡されたキーワード引数は、「キー=引数名、値=引数の値」というペアを持つ辞書としてまとめられます。

**kwargsの使用例

def print_kwargs(**kwargs):
    print(kwargs)

print_kwargs(a='foo', b=10, c=True)

出力結果

{'a': 'foo', 'b': 10, 'c': True}

出力を見ると、キーワード引数がそのまま辞書形式で格納されていることが確認できます。

*argsと**kwargsを組み合わせる

両者は同時に使うことも可能です。その場合、仮引数の順序は「通常の引数 → *args → **kwargs」の順に指定する必要があります。

def func(a, b=0, *args, **kwargs):
    print(a, b, args, kwargs)

func(1, 2, 3, 4, x=5, y=6)
# 出力: 1 2 (3, 4) {'x': 5, 'y': 6}

まとめ

  • *args:キーワードなしの可変長引数をタプルとして受け取る
  • **kwargs:キーワード付きの可変長引数を辞書として受け取る
  • 引数の個数や種類が不定の場合に、柔軟な関数設計が可能になる

ライブラリ開発やラッパー関数の作成など、引数をそのまま別の関数へ中継したい場面で特に活躍する機能なので、ぜひ使いこなせるようになりましょう。

  1. PythonのTkinterでスレッドを使う方法|threadingモジュールによる非同期処理の基本

    Tkinterでは、スレッド(Threading)を活用することで、複数の関数を同時に実行できます。これにより、アプリケーション内の処理を非同期で動かすことが可能になります。 Pythonでスレッドを使用するには、まずthreadingモジュールをインポートし、そのThreadクラスを継承した新しいクラスを定義します。そして、クラス内でrunメソッドをオーバーライドし、実行したい処理をその中に記述します。 つまり、スレッドを使えば複数の作業を並行して進めることができます。Tkinterアプリケーションでスレッドを実現する際は、Thread()関数を利用します。 ここでは、「一定時間スリープした

  2. Pythonのrange()関数とは?基本構文から実践的な使い方まで徹底解説

    プログラミング学習のチュートリアルでは、意外と語られることのない重要なポイントがあります。それは、実際の開発では「繰り返し処理」と「カウント処理」を大量に行う必要があるということです。そのため、本格的なプログラミング言語であれば、数値を繰り返し列挙するための仕組みが必ず用意されています。Pythonにおけるrange()シーケンス型は、まさにその代表的な手段の一つです。 この記事では、Pythonのrange()について詳しく解説し、実際のプログラムでの活用方法をご紹介します。 Pythonのrange()シーケンス型とは range()は関数のように見えますが、実際にはPython 3に組