web-dev-qa-db-ja.com

Pythonでリストを展開しますか?

ここで「アンパック」は間違った語彙かもしれません-これは重複した質問であると確信しているため、謝罪します。

私の質問は非常に簡単です:アイテムのリストを期待する関数で、エラーを発生させずにPythonリストアイテムを渡すにはどうすればよいですか?

my_list = ['red', 'blue', 'orange']
function_that_needs_strings('red', 'blue', 'orange') # works!
function_that_needs_strings(my_list) # breaks!

確かにリストを展開し、蹄に関数'red','blue','orange'を渡す方法がなければなりませんか?

168
AP257
function_that_needs_strings(*my_list) # works!

ここですべてを読むことができます。

217
Jochen Ritzel

はい、*args(スプラット)構文を使用できます。

function_that_needs_strings(*my_list)

ここで、my_listは任意の反復可能です。 Pythonは、指定されたオブジェクトをループし、各要素を関数の個別の引数として使用します。

式の呼び出しドキュメント を参照してください。

同様に、2つの星を使用した同等のキーワードパラメータがあります。

kwargs = {'foo': 'bar', 'spam': 'ham'}
f(**kwargs)

そして、関数シグネチャでキャッチオール引数を指定するための 同等の構文 があります。

def func(*args, **kw):
    # args now holds positional arguments, kw keyword arguments
24
Martijn Pieters

Python 3.5以降では、無制限の量のlistsをアンパックできます。

PEP 448-追加のアンパックの一般化

したがって、これは動作します:

a = ['1', '2', '3', '4']
b = ['5', '6']
function_that_needs_strings(*a, *b)
9
vishes_shell