python - 管理重复的关键字参数
问题描述
我想在一个类中创建一个用户级方法,其中可以通过关键字的几种变体传递参数。为此,我为每个关键字参数设置了一个允许的变体列表,并检查每个列表中的每个关键字。例如:
def some_function(self, **kwargs):
"""
this function does something with a and b as keyword args
"""
dict_allowed_a = ['a_variation1','a_variation2',...]
dict_allowed_b = ['b_variation1','b_variation2',...]
for arg_str in kwargs():
if arg_str in dict_allowed_a:
local_a = kwargs[arg_str]
if arg_str in dict_allowed_b:
local_b = kwargs[arg_str]
else:
print('Invalid keyword', file=sys.stderr)
raise ValueError
return self._private_method(local_a, local_b)
我有 3 个问题,从更具体到不太具体:
- 我如何检查是否有人通过了一个参数的多个变体,这必须引发异常。
- 我这样做正确吗?
- 我是否应该这样做,尝试管理变量输入?
解决方案
请注意,您必须处理奇怪的情况,例如
- 用户同时指定
a_variation1
和a_variation2
- 用户没有指定其中任何一个
我会使用类似的东西
local_a = ([kwargs[x] for x in kwargs.keys() if x in dict_allowed_a] + [None])[0]
local_b = ([kwargs[x] for x in kwargs.keys() if x in dict_allowed_b] + [None])[0]
请注意,[0]
它将仅提取第一个值,这将处理案例 1。
[None]
类似于默认值,用于案例 2。
推荐阅读
- c# - 如何解决此视觉工作室错误?“无法对打开了用户映射部分的文件执行请求的操作”
- python - Aur 包显示权限被拒绝{已解决}
- python - 对非常大的离散值样本数据集进行聚类
- bash - 无论上下文如何,有没有办法在 Bash 中获取绝对行号?
- pine-script - 我需要输入条形索引偏移值
- ios - XCode 错误:已达到免费开发配置文件的最大应用数
- jquery - 使用jquery在模态中获取隐藏值
- pandas - 如何将 flow_from_dataframe 与 compute_class_weight 一起使用?
- javascript - 在 iframe 中获取 html 页面的 url
- python - 用 Python 解析 json GitHub api