3

**kwargs の素晴らしさについて最近学び始めたばかりですが、つまずきにぶつかりました。キーワード引数を受け付けない関数に辞書のキーワードを送る方法はありますか? 次の簡単な設定を検討してください。

def two(**kwargs):
  return kwargs['second']

def three(**kwargs):
  return kwargs['third']

parameterDict = {}
parameterDict['first'] = 1
parameterDict['second'] = 2
parameterDict['third'] = 3

次のスタイルでインターフェイスする外部コードを使用します。

fitObject = externalCode(two, first=1, second=2)

問題は次のとおりです。「externalCode」は **kwargs を受け入れないため、辞書情報を受け入れ可能な形式にするスマートな方法はありますか?

また、さまざまな関数が parameterDict のさまざまなサブセットをパラメーターとして受け取ります。したがって、関数 "two" は "first" と "second" のパラメーターを受け入れる可能性がありますが、"three" は拒否します。そして "three" は 3 つすべてを受け入れます。

- - - - - - - - - - - - - - - - - - - 編集 - - - - - - -------------------------

人々は、上記のコードは失敗しないと正しくコメントしています。そのため、私は自分の問題を把握しましたが、再投稿する価値があるかどうかはわかりません。私はこのようなことをしていました:

def printHair(**kwargs):
    if hairColor == 'Black':
        print 'Yep!'
    pass

personA = {'hairColor':'blue'}
printHair(**personA)
NameError: global name 'hairColor' is not defined

そして、どうやら修正は、最初に printHair(hairColor, **kwargs) を定義するときに明示的に hairColor を含めることです。

4

3 に答える 3

2
>>> def externalCode(two, first=1, second=2):
...     print two, first, second
... 
>>> params = {'two': 9, 'first': 8, 'second': 7}
>>> externalCode(**params)
9 8 7
于 2012-02-17T04:49:39.903 に答える
1

キーワード展開演算子 ( **) を使用して、辞書を関数の引数にアンパックできます。

fitObject = externalCode(two, **parameterDict)
于 2012-02-17T04:46:59.053 に答える