gpt4 book ai didi

python - 可选参数,需要它们的某些组合

转载 作者:太空宇宙 更新时间:2023-11-04 09:01:57 25 4
gpt4 key购买 nike

我有一个一般性问题以及一个特定用例。

可选参数很简单:def func(a, b, c=None): ... 然后在正文中可能使用 c 的任何地方只需编写 if c: 首先,或者类似的东西。但是当需要特定的参数组合时呢?一般情况是考虑是否存在确切参数的任意情况。对于函数 def func(a, b, c=None, d=None, e=None, f=None): ... 这将包括一些愚蠢的事情,例如:提供 c 和 d 但不提供e和f,或只提供e,或至少提供c、d、e、f中的3个。但我的用例不需要这种普遍性。

对于 def func(a, b, c=None, d=None): ...,我希望提供 c 和 d 中的一个。

我想到的解决方案包括:
- 在主体中,手动检查有多少个 c 和 d 不为 None,如果不完全为 1,则返回一个错误,指出需要指定 exactly 1
例如。

def func(a, b, c=None, d=None):
how_many_provided = len([arg for arg in [c, d] if arg]) # count the non-None optional args
if not how_many_provided == 1:
return "Hey, provide exactly 1 of 'c' and 'd'"
if c:
# stuff to do if c is provided
elif d:
# stuff to do if d is provided

- 将函数更改为 def func(a, b, e, f): ... 其中 e 表示 c 或 d,f 表示 e 表示其中的哪一个。
前任。

def func(a, b, e, f):
if f == 'c':
# stuff to do if c is provided, with e as c
if f == 'd':
# stuff to do if d is provided, with e as d

这些都行得通,但是标准/公认/pythonic 方法是什么?

最佳答案

我想说,在您的简单案例中,对您的用户来说最简单的方法是重构为单独的函数。每个功能按照描述执行不同的工作,然后完成一个共同的工作,例如对于你的最后一个案例

def funcC(a, b, c):
# stuff to do if c is provided, with e as c
common_func(a,b,c, None)

def funcD(a, b, d):
# stuff to do if d is provided, with e as d
common_func(a,b,None, d)

然后用户知道哪些参数很重要,并且只能使用有效的可能组合,用户不必猜测或有机会错误地调用它们。提供函数的您可以提供调用者未提供的参数所需的任何内容。

通过谷歌搜索“标志参数”可以找到对这些内容的更长解释,例如Martin Fowler Stack Overflow这些倾向于提到 bool 参数,但这实际上是同一件事,不同的代码路径取决于没有其他影响的参数。

要查找的另一个短语是“控制耦合”

关于python - 可选参数,需要它们的某些组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24457819/

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