Pythonでは、古いものから新しい関数を作成するメソッドが必要です。Pythonで** kwargsの関数から* argsを取得する関数
入力:引数とデフォルト値としてタプルからペアを持つ新しい機能:キーワード
出力の辞書をとるペアのタプルとともにf(**kwargs)
のような機能。私がこれまで持って何
:
def f(**kwargs):
return 'test',kwargs['a'], kwargs['b']
def magic(f,argtuple):
arglist=",".join([str(ke)+" = "+str(va) for ke,va in argtuple])
keylist=",".join([str(ke)+" = "+str(ke) for ke,va in argtuple])
exec("def g("+arglist+"): return f("+keylist+")")
return g
それは私が欲しいものを行います。
In [25]: f(b=4,a=3)
Out[25]: ('test', 3, 4)
In [26]: g=magic(f,(['a',1],['b',2]))
In [27]: g()
Out[27]: ('test', 1, 2)
In [28]: g(a=3,b=5)
Out[28]: ('test', 3, 5)
In [29]: import inspect
In [30]: print inspect.getargspec(f)
ArgSpec(args=[], varargs=None, keywords='kwargs', defaults=None)
In [31]: print inspect.getargspec(g)
ArgSpec(args=['a', 'b'], varargs=None, keywords=None, defaults=(1, 2))
私は、文字列を構築したくないとexec
機能を使用したくないしかし、 。これを達成する他の方法は何ですか?
'g'は絶対にその署名を持っていなければなりませんか、' * args'と '** kwargs'を受け入れるとうまくいくのでしょうか? –
@Rawing:説明したような署名を持っています。 –