gpt4 book ai didi

python - 在 Python 中精确地要求一组关键字参数中的一个的最佳方法?

转载 作者:行者123 更新时间:2023-12-01 04:12:14 25 4
gpt4 key购买 nike

我正在围绕 REST API 编写一个包装器,我希望允许用户通过其名称或数据库 ID 来检索小部件。

所以我做了两个关键字参数。现在,看来您应该只能传入其中之一。虽然我不确定它是否可以更具可读性,但实现起来还不错。

def get_widget(id=None, name=None):
if (id and name) or not (id or name):
raise ValueError("Exactly one of (id, name) is required.")
# do stuff

我很好奇:如果我有 n 个这些关键字参数,我该怎么办?我可以接受 **kwargs 并强制执行 len(kwargs) == 1,但随后我需要迭代 kwargs 才能获取 key ,然后切换在 key 上。

有更好或更易读的方法吗?

最佳答案

老实说,我会采取这种方法:

def get_widget_by_id(id): pass  # your code here


def get_widget_by_name(name): pass # your code here

不过,总的来说,我不知道有什么方法可以只允许两个参数之一而不滚动您自己的检查和异常。我认为最简洁的编写方式应该是这样的:

def get_widget(*, arg_one=None, arg_two=None):  # use the * to force keyword args

if arg_one is None and arg_two is None:
raise ValueError("No args provided."
" Must provide either 'arg_one' or 'arg_two'")
elif arg_one is not None and arg_two is not None:
raise ValueError("Too many args provided."
" Must provide only 'arg_one' or 'arg_two'")
else:
# do your thing

如果您有大量参数,则可以使用any/all

if all(_ is None for _ in (arg_one, arg_two)):
pass
elif all(_ is not None for _ in (arg_one, arg_two)):
pass

作为另一种选择,您始终可以只允许 idname,尽管这可能是多余的,并且仅在两者都匹配时才返回小部件。

关于python - 在 Python 中精确地要求一组关键字参数中的一个的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34773445/

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