在Python中,我希望有一个从旧函数构建新函数的方法。你知道吗
Input:一个像f(**kwargs)
这样的函数,加上一个成对的元组,它接受一个关键字字典
Output:一个新函数,将元组中的对作为参数和默认值。你知道吗
到目前为止我所拥有的:
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
函数。实现这一目标的其他方法有哪些?你知道吗
你要找的是functools.partial()。你知道吗
这里有一个解决方案,它也构造了正确的签名。它需要一个合理的最新Python,因为它使用相对较新的添加到
inspect
模块和__signature__
特殊属性。你知道吗相关问题 更多 >
编程相关推荐