gpt4 book ai didi

python - 如何传播默认值

转载 作者:太空宇宙 更新时间:2023-11-04 04:28:23 26 4
gpt4 key购买 nike

支持我已经定义了一些函数,例如(非常简单的例子)

def f1(a, b, arg='something'):
...
def f2(c, arg='else'):
...

然后我调用它们作为:

def f(a, b, c):
return f1(a, b) + f2(c)

因为这很常用,但我想分别定义f1f2,这样就可以只调用一个。

我希望在调用 f 时可以使用不同的默认参数调用 f1f2,所以我可以这样做:

def f(a, b, c, arg1='something', arg2='else'):
return f1(a, b, arg1) + f2(c, arg2)

这不是很容易维护(我有比 2 更多的函数和更多的参数),因为当我更新一个函数时我需要更新 f。一种选择是使用 None 作为默认值,然后在函数体内更改它们,例如

def f1(a, b, arg=None):
arg = arg or 'something'
...

但这从签名中隐藏了默认参数的真实值。此外,这并不能解决我所有的问题,因为如果我向 f1 添加一个新参数,我必须更改 f 的签名及其实现...

最佳答案

听起来您已经到了面向对象编程可以帮助您的地步。您可以将您的函数重写为一个类:

class FFuncs:
def __init__(self, a, b, c, arg1="foo", arg2="bar"):
self.a = a
self.b = b
self.c = c
self.arg1 = arg1
self.arg2 = arg2
def f1(self):
return str(self.a + self.b) + self.arg1
def f2(self):
return str(self.c) + self.arg2
def f(self):
return self.f1() + self.f2()

FFuncs(2, 3, 5, arg1=" Foos and ", arg2=" Spam").f()
# Returns "5 Foos and 5 Spam"

现在您始终可以在每次执行之前访问您的 kwargs 的默认值。如评论中所述,如果您需要为类的任何给定方法提供特别灵活的调用签名,您仍然可以使用 *args, **kwargs 进行抽象。

关于python - 如何传播默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53123136/

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