2017-09-18 42 views
0

私は機能を持っている:動的生成された引数を関数に渡すにはどうすればよいですか?

def do_something(arguments_list): 
    user = User(name = argument_list['name'], 
       age = argument_list['age'], 
       ... 
       sex = argument_list['sex']) 

argument_list(辞書)は常に同じキーを持っていません。例えば、時にはそれは次のようになります。

arguments_list = {'name': 'Zara', 'age': 7, 'sex': 'Male'} 

が、それはまた次のようになります。

arguments_list = {'name': 'Zara'} 

私は動的に(Userクラスのこの場合、コンストラクタで)関数に引数を渡すことができますどのようにどのように依存しますキーは辞書にありますか?

+2

を。これにより、辞書が解凍され、項目が引数として渡されます。 – yesemsanthoshkumar

+0

'name'パラメータだけを使って' User'を呼び出す/インスタンス化するのは大丈夫ですか、 'User(...)'に渡す適切なデフォルトを設定する必要がありますか? –

+0

1つのパラメータでUserを呼び出すことはOKです。 – trojek

答えて

3

これはキーワード引数の任意の数を取り、Userに渡します:

def do_something(**kwargs): 
    user = User(**kwargs) 

あなたはまた、このような何かを行うことができ、引数についての詳細を知っている場合(この場合には、あなたが最も可能性の高いdo_somethingデフォルトにしたいです値Userデフォルト値と同じになるように):

def do_something(name=None, age=None, sex=None): 
    user = User(name=name, age=age, sex=sex) 

は何かが明確化が必要な場合は、私に教えてください。ここで


あなたはより多くの情報について*args**kwargs持っている:**ユーザー(** arguments_list)**を試してみてください https://www.saltycrane.com/blog/2008/01/how-to-use-args-and-kwargs-in-python/

+0

このように 'user = User(** kwargs)'私は辞書全体を渡すことができますが、辞書キーの値に対応するフィールド名に割り当てる必要があります。どうしたらいいですか? – trojek

+0

辞書キーはフィールド名として使用されます。私。 'User(** {'name': 'Paco'、 'age':23})'は 'User(name = 'Paco'、age = 23)と同等です。これはあなたの質問に答えますか? –

+0

正確には、私は** kwargsから特定の値を得る方法を知っていますが、** kwargsのキーと同じ(Userクラスの)特定のフィールド名に割り当てる必要があります。言い換えれば、私はフィールド "名前"が存在することを知らないし、** kwargsのキーとして提供されていれば、このフィールドに同じ値を割り当てなければならない。 – trojek

-2
>>> def do_something(**arguments_list): 
    name = arguments_list['name'] 


>>> do_something(name="name") 
+2

これはOPが探しているものではありません。 – bfontaine

関連する問題