【发布时间】:2014-05-01 04:03:18
【问题描述】:
我正在经历 LPTHW,但遇到了一些我无法理解的事情。什么时候你希望你的布尔值 and 或 or 返回布尔值以外的东西? LPTHW 文本指出,像 python 这样的所有语言都有这种行为。他是指解释型语言还是编译型语言,还是鸭子类型语言和静态类型语言?
我运行了以下代码:
>>> False and 1
False
>>> True and 1
1
>>> 1 and False
False
>>> 1 and True
True
>>> True and 121
121
>>> False or 1
1
>>> False or 112
112
>>> False or "Khadijah"
'Khadijah'
>>> True and 'Khadijah'
'Khadijah'
>>> False or 'b'
'b'
>>> b = (1, 2, "K")
>>> b
(1, 2, 'K')
>>> False or b
(1, 2, 'K')
>>>
请帮助我了解这里发生了什么。
根据文档:http://docs.python.org/2/library/stdtypes.html
除非另有说明,否则具有布尔结果的操作和内置函数始终返回 0 或 False 为假,1 或 True 为真。 (重要的例外:布尔运算 or 和 and 总是返回它们的一个操作数。)
根据 LPTHW:http://learnpythonthehardway.org/book/ex28.html
为什么"test" and "test" 返回 "test" 或 1 and 1 返回 1 而不是 True?
Python 和许多类似的语言将操作数之一返回到其布尔表达式,而不仅仅是 True 或 False。这意味着,如果您执行 False and 1,您将获得第一个操作数 (False),但如果您执行 True and 1,您将获得第二个操作数 (1)。玩一下这个。
【问题讨论】:
-
布尔运算也是惰性的。当找到第一个 False 操作数时,
and操作将停止计算操作数。or操作将在找到第一个 True 操作数时停止计算操作数。 -
如果所有操作数都为 True,
and操作将返回最后一个操作数。or操作将返回第一个计算结果为 True 的操作数。有一些用例 - 记住这一点,有一天你会说啊哈!