模块中的重复功能并更改默认参数

时间:2015-10-22 10:36:12

标签: python python-2.7

我努力寻找能够复制函数,重命名并应用参数的解决方案。一个例子是更具说明性的

我有一个模块:

get(a, c=4, ver=False):
  ...

set(a, b, c=4, ver=False):
  ...

并且想要为所有这些函数创建相应的函数(如果手动完成)

ver_get(*args, **kwargs):
    kwargs['ver'] = True
    return get(*args, **kwargs)

ver_set(*args, **kwargs):
    kwargs['ver'] = True
    return set(*args, **kwargs)

我在所有函数上尝试了for循环,但由于f的后期绑定问题而失败(见下文)。由于使用* args,** kwargs,我无法应用函数f作为输入来应用正常的解决方法。

funcs = {}
g = None
f = None
for g, f in globals().iteritems():
    funcs['ver_'+g] = lambda *args, **kwargs: f(*args, **dict(kwargs, ver=True))

此funcs之后还需要包含在全局变量中。

为什么我要这样做?只需拥有更好的语法而无需手动复制函数。

1 个答案:

答案 0 :(得分:0)

我试图提前找到答案但失败了,然后我突然绊倒了它。使用偏。完整的解决方案:

funcs = {}
g = None
f = None
from functools import partial
for g, f in globals().iteritems():
    if hasattr(f, '__call__'):
        funcs['ver_'+g] = partial(f, ver=True)
globals().update(funcs)
del funcs
del g
del f
相关问题