gpt4 book ai didi

python - 在方法链接时保留参数默认值

转载 作者:太空宇宙 更新时间:2023-11-03 13:53:39 24 4
gpt4 key购买 nike

如果我必须包装现有方法,让我们从新方法说 wrapee(),比如 wrapper(),并且 wrapee() 为某些参数提供默认值,我如何在不引入不必要的依赖项的情况下保留其语义和维护?让我们说,目标是能够使用 wrapper() 代替 wrapee() 而无需更改客户端代码。例如,如果 wrapee() 定义为:

def wrapee(param1, param2="Some Value"):
# Do something

然后,定义 wrapper() 的一种方法是:

def wrapper(param1, param2="Some Value"):
# Do something
wrapee(param1, param2)
# Do something else.

但是,wrapper() 必须对我不喜欢的 param2 的默认值做出假设。如果我可以控制 wrapee(),我会这样定义它:

def wrapee(param1, param2=None):
param2 = param2 or "Some Value"
# Do something

然后,wrapper() 将更改为:

def wrapper(param1, param2=None):
# Do something
wrapee(param1, param2)
# Do something else.

如果我无法控制 wrapee() 的定义方式,那么如何最好地定义 wrapper()?想到的一个选择是使用非 None 参数创建一个字典并将其作为字典参数传递,但这似乎不必要地乏味。

更新:

解决方案是像这样同时使用列表和字典参数:

def wrapper(param1, *args, **argv):
# Do something
wrapee(param1, *args, **argv)
# Do something else.

以下所有调用都是有效的:

wrapper('test1')
wrapper('test1', 'test2')
wrapper('test1', param2='test2')
wrapper(param2='test2', param1='test1')

最佳答案

查看 argument lists在 Python 文档中。

>>> def wrapper(param1, *stuff, **kargs):
... print(param1)
... print(stuff)
... print(args)
...
>>> wrapper(3, 4, 5, foo=2)
3
(4, 5)
{'foo': 2}

然后传递参数:

wrapee(param1, *stuff, **kargs)

*stuff 是可变数量的非命名参数,**kargs 是可变数量的命名参数。

关于python - 在方法链接时保留参数默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2114510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com