1. ホーム
  2. python

[解決済み] argsと**kwargsの使い分け [重複]。

2022-03-20 03:07:30

質問

という概念に難があるんです。 *args**kwargs .

ここまでで、私は学びました。

  • *args = 引数のリスト - 位置引数として
  • **kwargs = 辞書 - そのキーは個別のキーワード引数になり、値はこれらの引数の値になります。

どのようなプログラミング作業に役立つのか理解できません。

そうかもしれませんね。

リストや辞書を関数の引数として入力し、同時にワイルドカードとして入力することで、どんな引数でも渡すことができると思うのですが?

を説明する簡単な例はありますか? *args**kwargs が使われているのですか?

また、私が見つけたチュートリアルでは、"*"と変数名だけを使っていました。

Are *args**kwargs は単なるプレースホルダーなのか、それとも正確に *args**kwargs をコードに追加してください。

どのように解決するのですか?

この構文は *** . 名前 *args**kwargs は、あくまでも慣習であり、必ず使用しなければならないものではありません。

あなたは *args は、関数に渡されるかもしれない引数の数がわからないとき、つまり、関数に任意の数の引数を渡すことができるようにします。 例えば

>>> def print_everything(*args):
        for count, thing in enumerate(args):
...         print( '{0}. {1}'.format(count, thing))
...
>>> print_everything('apple', 'banana', 'cabbage')
0. apple
1. banana
2. cabbage

同様に **kwargs を使えば、あらかじめ定義していない名前付き引数を扱うことができます。

>>> def table_things(**kwargs):
...     for name, value in kwargs.items():
...         print( '{0} = {1}'.format(name, value))
...
>>> table_things(apple = 'fruit', cabbage = 'vegetable')
cabbage = vegetable
apple = fruit

これらは名前付き引数と一緒に使うこともできます。 明示的な引数はまず値を取得し、それ以外のものはすべて *args**kwargs . 名前付き引数はリストの中で最初に来ます。 例えば

def table_things(titlestring, **kwargs)

また、同じ関数定義の中で両方を使用することもできますが *args の前に存在する必要があります。 **kwargs .

を使用することもできます。 *** の構文は、関数を呼び出すときに使用します。 例えば

>>> def print_three_things(a, b, c):
...     print( 'a = {0}, b = {1}, c = {2}'.format(a,b,c))
...
>>> mylist = ['aardvark', 'baboon', 'cat']
>>> print_three_things(*mylist)
a = aardvark, b = baboon, c = cat

この例でわかるように、項目のリスト (またはタプル) を受け取り、それを解凍しています。これによって、関数の引数にマッチさせることができます。 もちろん * 関数定義の中と関数呼び出しの中の両方です。