在Python中,我想要一個從舊函數構建新函數的方法。從函數中獲取* args函數與python中的kwargs
輸入:用對的元組像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:我想要簽署所描述的 –