假设Python库中有一个函数(我们将其称为mymodule
):
def some_func(a,b='myDefaultValue'):
return some_computation
然后在另一个模块中有另一个函数调用它
^{pr2}$如何使wrapper
继承some_func
参数的默认值?我可以做一些类似的事情:
def wrapper(a,b=None):
if b:
return some_transform(some_func(a,b))
else:
return some_transform(some_func(a))
但这似乎是不必要的麻烦,导致了一个具有多个可选参数的可能性的组合爆炸,并且使得我不能显式地将None
传递给wrapper
。在
有没有一种方法可以获取函数的默认参数,或者通常的做法是将该值提取到两个函数声明都可以使用的共享常量中?在
你的问题不够清楚。但据我从您的问题中了解,您应该使用
class
,这样您就可以轻松地在类内的多个函数之间共享值您可以使用argument unpacking来完成此操作:
如果计划以这种方式包装多个函数,可以考虑将
^{pr2}$wrapper
adecorator:您可以使用函数默认值: https://docs.python.org/2/library/inspect.html?highlight=func_defaults#types-and-members
输出:
^{pr2}$编辑:要从注释中回答您的问题,没有任何内置功能可以按名称查找带有默认值的函数的参数。但是,您知道具有默认值的参数必须位于非可选参数之后。因此,如果你知道你拥有的参数的总数,以及其中有多少参数有默认值,你可以减去2,得到具有默认值的参数的起点。然后,可以将参数列表(从先前计算的参数索引开始)与默认参数值列表压缩在一起,并从列表中创建字典。使用inspect模块获取所需的所有信息:
是这样的:
在上面的例子中,namedargsdict是带有
some_func
默认值的参数列表。在进一步阅读:
https://docs.python.org/2/library/inspect.html#inspect.getargspec
相关问题 更多 >
编程相关推荐