【问题标题】:Multiple 'Or' conditional evaluator in Python [duplicate]Python中的多个“或”条件评估器[重复]
【发布时间】:2013-09-14 11:57:07
【问题描述】:
我是 Python 新手,最近了解了“或”条件评估器。有人可以向我解释为什么下面的代码给出'abcd':
'abcd' or 'hijk' or 'lmno'
它不应该返回 True 吗?另外,Python 如何评估这些语句?它是先使用“hijk”还是“lmno”,还是评估“abcd”或“hijk”?基本上是从右到左还是从左到右?
【问题讨论】:
标签:
python
conditional-statements
【解决方案1】:
这在documentation中有明确说明:
表达式x and y首先计算x;如果x 是false,则返回其值;否则,将评估 y 并返回结果值。
表达式x or y 首先计算x;如果x 是true,则返回其值;否则,y 被评估并返回结果值。
【解决方案2】:
a or b 在 Python 中的工作方式如下:
- 如果
bool(a) 计算结果为True,则表达式返回a(并且不是 True)。
- 否则,表达式返回
b。
由于bool('abcd') 是True,'abcd' or <anything> 总是返回'abcd'。
【解决方案3】:
易于检查:
def cond(arg):
print arg
return arg
print cond("a") or cond("b") or cond("c")
打印两次“a”。
或者评估从左到右进行并且是惰性的,即一旦知道结果,它就会停止评估子表达式。
非 None 的字符串值在作为条件求值时被视为 True(在这种情况下是布尔“或”表达式的一部分)。