1. ホーム
  2. python

[解決済み] Python 3: 星付き式でリストを展開する

2022-02-01 14:26:23

質問

使用例です。

def f(a, b, c, d): 
    print(a, b, c, d, sep = '&')

f(1,2,3,4)
>>> 1&2&3&4

f(*[1, 2, 3, 4])
>>> 1&2&3&4

Pythonのドキュメントのどこに * を説明してください。

解決方法は?

その *args の呼び出し規約は エクスプレッションリファレンス :

もし、構文 *expression が関数呼び出しに現れる。 expression はイテラブルとして評価されなければならない。このイテラブルの要素は、あたかも追加の位置引数であるかのように扱われ、位置引数がある場合は x1, ..., xN であり、かつ expression はシーケンスに評価されます。 y1, ..., yM これは、M+N個の位置引数を持つ呼び出しと等価です。 x1, ..., xN, y1, ..., yM .

ということで [1, 2, 3, 4] は反復可能な式であり、他に位置引数がないため、M=0、N=4、つまり合計4つの位置引数を持つ呼び出しとして扱われます。

このように、関数を呼び出す際も f(1, 2, *[3, 4]) または、反復記号と位置引数の他の任意の組み合わせ、ただし反復記号が を指定します。