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

Pythonで引数リスト(*args)を使って関数を呼び出す方法を徹底解説

Pythonで*argsを使った関数呼び出しの基本

Pythonでは、アスタリスク(*)を使うことで、可変長の引数を柔軟に扱えます。ここでは、関数定義時と関数呼び出し時における * の役割の違いを、サンプルコードとともに解説します。

関数定義時の * の意味

def baz1(foo, *args):

args の横にある * は、「渡された残りのパラメータをすべて受け取り、args という名前のタプルに格納する」という意味です。これにより、任意の個数の位置引数を受け取れる関数を定義できます。

関数呼び出し時の * の意味

foo(*args)

一方、呼び出し側で args の横に * を付けると、「args というシーケンスを展開(アンパック)して、個々のパラメータとして関数に渡す」という意味になります。

サンプルコードで動作を確認

以下の例では、baz1* 付きで引数を受け取り、baz2 はリストを明示的に受け取ります。どちらのラッパーでも、内部の args には [2, 3, 4] という値が格納されている点に注目してください。

def baz1(foo, *args):  # アスタリスク付き
    foo(*args)

def baz2(foo, args):   # アスタリスクなし
    foo(*args)

def foo2(x, y, z):
    print(x + y + z)

baz1(foo2, 2, 3, 4)
baz2(foo2, [2, 3, 4])

実行結果:

9
9

このように、baz1 では個別に渡された引数が *args によってひとつのタプルにまとめられ、baz2 では明示的に渡したリストがそのまま args に入ります。そして両者とも、foo(*args) の呼び出し時にシーケンスが展開されるため、同じ結果(9)が出力されます。

補足:*args と **kwargs の違い

なお、*args が受け取るのは実際には「タプル」です。また、可変長のキーワード引数を受け取りたい場合は、ダブルアスタリスク(**kwargs)を使用します。**kwargs は辞書型としてキーワード引数を受け取るため、用途に応じて使い分けるとよいでしょう。

  1. Pythonのextend()メソッドの使い方を初心者向けにわかりやすく解説

    例えば、パーティーを開くことになって、招待したい友人のリストを作るとしましょう。このリストは、招待したい人を思い出すたびに増えていくかもしれません。 そんなときに役立つのがPythonのextend()メソッドです。extend()メソッドを使うと、リストの末尾に1つまたは複数の要素を追加できます。 この記事では、Pythonのextend()メソッドの使い方を、招待リストの例を使いながら丁寧に解説していきます。 Pythonのextend()メソッドとは? Pythonのextend()メソッドは、Pythonのリストメソッドのひとつです。他のリストメソッドにはappend()やinsert

  2. 【Python入門】defで定義した関数をMatplotlibでプロットする方法

    Pythonでは、defキーワードで定義した自作関数を、Matplotlibを使って簡単にグラフ化できます。本記事では、ユーザー定義関数 f(x) を作成し、その結果をプロットするまでの基本手順をサンプルコード付きで解説します。 プロットまでの基本手順 defで定義した関数をプロットするには、以下の手順に従います。 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整する defを使ってユーザー定義関数 f(x) を作成する NumPyを使って x のデータ点を生成する plot()メソッドで x と f(x) をプロットする show()メソッドで図を画面に表示する サ