6
def foo(a, b, c):
 print a+b+c

i = [1,2,3]

i に明示的なインデックスを付けずに foo(i) を呼び出す方法はありますか? foo(i[0], i[1], i[2]) を回避しようとしています

4

3 に答える 3

10

はい、使用しますfoo(*i):

>>> foo(*i)
6

*関数定義で も使用できます。def foo(*vargs)キーワード以外のすべての引数を というタプルに入れますvargs。を使用すると**def foo(**kargs)すべてのキーワード引数が と呼ばれる辞書に入れられますkargs

>>> def foo(*vargs, **kargs):
        print vargs
        print kargs

>>> foo(1, 2, 3, a="A", b="B")
(1, 2, 3)
{'a': 'A', 'b': 'B'}
于 2012-12-15T11:00:05.393 に答える
4

これは引数アンパッキングと呼ばれ、そのための演算子があります。

foo(*i)

ところで、これはリストだけでなく、あらゆる iterable で機能します。

于 2012-12-15T11:00:50.307 に答える
3

はい、Python は以下をサポートしています。

foo(*i)

Unpacking Argument Listsのドキュメントを参照してください。反復可能なものなら何でも動作します。星が 2 つ**あると、dict と名前付き引数で機能します。

def bar(a, b, c): 
    return a * b * c
j = {'a': 5, 'b': 3, 'c': 2}

bar(**j)
于 2012-12-15T11:00:04.500 に答える