在Python中,如何确保只有一个值是真的?

时间:2016-04-28 20:37:20

标签: python python-3.x

用户可以向Web API提供X查询参数,例如:

param_a

param_b

param_c

param_a = self.req.params.get('param_a', None)
param_b = self.req.params.get('param_b', None)
param_c = self.req.params.get('param_c', None)

如果未提供给定的查询参数,则其值为“无”。

他们必须提供至少一个,不超过一个或者参数。

在Python 3中,确认至少提供一个且不超过一个参数的有效方法是什么?

3 个答案:

答案 0 :(得分:2)

统计他们。

<div id="bodyEquivalent">
</div>
<p id="results">result</p>

由于sum(x is not None for x in (param_a, param_b, param_c)) == 1 的值为True,因此总和将是不是1的参数数量。

答案 1 :(得分:0)

@Ignacio Vazquez-Abrams有一个不错的答案。您还可以检查已过滤列表的长度:

if len([p for p in (param_a, param_b, param_c) if p]) != 1:
    print("Invalid.")

如果您碰巧有一个参数列表,那么会更短:

if len([p for p in params if p]) != 1:
    print("Invalid.")

答案 2 :(得分:0)

设定了多少? 列出所有已设置的列表,并查看它的长度:

len([p for p in (param_a, param_b, param_c) if p != None]) == 1

这就像Ignacio的回答一样,但这不依赖于隐式地将True转换为整数然后对它求和,所以我认为找到列表的长度而不是任何总和的意图有点清楚。 / p>

[根据@ pm-2ring的建议进行编辑,以处理?a=foo&b=&c=bar等查询字符串可能合理地成为b=''而我的原始支票会将b计为“未设置”而不是“设置为空字符串”]。