【パイソン】** kwargsから和1つの位置引数を取りますが、2が与えられました

Pythonの定義関数は** kwargs--目的を可能にするために単純な用語のパラメータに加えることができる添加可変パラメータのパラメータ名を、として辞書パラメータを渡します。しかし、場合にのみ-あなたが提供しなければならないパラメータ名を

たとえば次のような状況を示します。

1  クラスC():
 2      DEF  __init__(自己、** kwargsから):
 3          プリント(kwargsから)

 

我々は、次の入力を持っています:

IN [48]:C = C()
{} 

内の[ 49]:C = C(A = 1 
{ ' A ':1}

 

それはすべての常識です。しかし、私は辞書納期を使用する場合:

C = C({[50]に' A ':1 })
 --------------------------------- ------------------------------------------ 
TypeError例外トレースバック(最新の呼び出しの最後)
 <ipython-入力50-2be6d5be2a84>  <モジュール> ()
 ----> 1、C = Cの({ ' A ':1})

 

私はそれが一般的なアプローチによって置き換えられ、__init__あまりにもうるさいと思いました:

1:[51]において、クラスC():
 2      ...:      デフ F(自己、** kwargsから):
 3      ...:          プリント(kwargsから)
 4      ...:

 

[52]におけるC = C()

で[ 53]:CF({ ' A ':1 })
 ------------------------- -------------------------------------------------- 
TypeError例外トレースバック(最新のコール最後)
 <ipython-入力53-5daee03baab1>  <モジュール> ()
 ----> 1枚のCF({ ' A ':1 })

はTypeError:F()がかかり 1つの位置引数が、2与えられた

 

含む関数はそう__main__の下で定義されています。

IN [54]:DEF F1(** kwargsから):
    ...:      プリント(kwargsから)
    ...:

[における F1:56]({ ' A ':1 })
 ---------- -------------------------------------------------- --------------- 
はTypeErrorトレースバック(最後の最新のコール)
 <ipython-入力56-8652a6e75162>  <モジュール> ()
 ----> 1つのF1({ ' ':1 })
はTypeError:F1()が0の位置引数を取るが、 1が与えられました

 

しかし、私は目の前にパラメータF1を追加したとき、パラメータ名

1 [57]において:F1(B = { ' A ':1 })
 2 { ' B ' { ' A ':1}}

 

すぐに問題を解決します。

 


 

考えます:

私たちの以前のミスの試行では、中に渡されたシンプルな辞書。** kwargsからは提供しますがパラメーターは、辞書機能に変わりはなく、直接辞書にし、それをパラメータとして理解されることはありません。基本的にPythonインタプリタは、私たちの入力がされたと思わパラメータ値として使用する辞書のが、持ち運びなかったパラメータ名、およびPythonの機能メカニズムフロント** kwargsから上に書かれるべき「固定名」パラメータを、私たちは勘違いを渡します「固定名」パラメータは、実際には、私たちの以前の定義は「固定名」パラメータに参加していなかったので、エラーがインクルードが与えられた1つのしかし2位置引数を取ります

あなたが本当に辞書を渡したい場合はどのようにそれを行うには?この単純な、直接** kwargsからkwargsからに:

1:[58]において、クラスC():
 2      ...:      DEF  __init__ (自己、kwargsから):
 3      ...:          プリント(kwargsから)
 4      ...:
 5  
6 [59]において:C = C({ ' A ':1 })
 7 { ' A ':1}

 

この経験は、** kwargsから特別なパラメータの私の理解を深めました。細部に注意を払うように学習した後!

おすすめ

転載: www.cnblogs.com/littleye233/p/11618990.html