Python のキーワードのみの引数 (VarArgs) について説明します [重複] 質問する

Python のキーワードのみの引数 (VarArgs) について説明します [重複] 質問する

以下のコードをご覧ください:-

#!/usr/bin/python
# Filename: total.py

def total(initial=5, *numbers, **keywords):
    count = initial
    for number in numbers:
        count += number
    for key in keywords:
        count += keywords[key]
    return count

print(total(10, 1, 2, 3, vegetables=50, fruits=100))

誰か、*数字と**キーワードが引数をどのように拾うのか説明してもらえますか?簡単な説明をいただければ幸いです。よろしくお願いします

ベストアンサー1

コードでは、 にnumbers(1,2,3) タプルが割り当てられます。には、およびkeywordsを含む辞書が割り当てられます。vegetablesfruits

1 つの星 ( *) は位置引数を定義します。これは、任意の数の引数を受け取ることができることを意味します。渡された引数はタプルとして扱うことができます。

2 つの星 ( **) はキーワード引数を定義します。

参考資料は入手可能ですここ

Python 2.x (キーワードのみの引数以前)

def foo(x, y, foo=None, *args): print [x, y, foo, args]

foo(1, 2, 3, 4)            --> [1, 2, 3, (4, )]  # foo == 4
foo(1, 2, 3, 4, foo=True)  --> TypeError

Python 3.x (キーワードのみの引数を使用)

def foo(x, y, *args, foo=None): print([x, y, foo, args])

foo(1, 2, 3, 4)           --> [1, 2, None, (3, 4)]  # foo is None
foo(1, 2, 3, 4, foo=True) --> [1, 2, True, (3, 4)]

def combo(x=None, *args, y=None): ...  # 2.x and 3.x styles in one function

foo=熟練したプログラマーは 2.x で何が起こったかを理解していますが、それは直感に反しています (位置引数が十分にある限り、位置引数はキーワード引数に関係なくバインドされます)

Python 3.xでは、より直感的なキーワードのみの引数が導入され、ペップ3102(可変引数の後のキーワード引数は名前でのみバインドできます)

おすすめ記事