33

我正在观看2007 年有关高级 Python 或理解 Python 的视频,并且在 18'27" 演讲者声称“正如某些人可能知道 Pythonandor返回两个值之一,而not返回总是一个布尔值。” ?

据我所知,andor返回布尔值。

4

4 回答 4

58

andand运算符确实返回它们的or一个操作数,而不是像Trueor这样的纯布尔值False

>>> 0 or 42
42
>>> 0 and 42
0

not总是返回一个纯布尔值:

>>> not 0
True
>>> not 42
False
于 2010-12-18T11:35:02.600 回答
37

请参阅Python 文档中的标准库参考中的此表:

布尔运算

于 2013-10-04T17:32:51.883 回答
23

来自Python 文档

如果其参数为假,则运算符不产生 True,否则为 False。

表达式 x 和 y 首先计算 x;如果 x 为假,则返回其值;否则,评估 y 并返回结果值。

表达式 x 或 y 首先计算 x;如果 x 为真,则返回其值;否则,评估 y 并返回结果值。

Python 的or运算符返回第一个 Truth-y 值或最后一个值,然后停止。这对于需要备用值的常见编程分配非常有用。

像这个简单的:

print my_list or "no values"

如果里面有任何东西,这将打印my_list出来。否则,它将打印no values(如果列表为空,或者它是None...)。

一个简单的例子:

>>> my_list = []
>>> print my_list or 'no values'
no values
>>> my_list.append(1)
>>> print my_list or 'no values'
[1]

and当您需要保护而不是回退时,使用 using 的赞美,它返回第一个 False-y 值或最后一个值并停止。

像这个:

my_list and my_list.pop()

这很有用,因为您不能使用list.poponNone[],它们是列表的常见先验值。

一个简单的例子:

>>> my_list = None
>>> print my_list and my_list.pop()
None
>>> my_list = [1]
>>> print my_list and my_list.pop()
1

在这两种情况下,都返回了非布尔值,并且没有引发异常。

于 2015-02-04T12:21:51.013 回答
0

需要为@Frédéric 的答案添加一些要点。

确实返回他们的操作数之一???

这是真的,但这不是这背后的逻辑。在 python 中,除 0 以外的数字被认为是 True,而数字 0 被认为是 False。

(0 和 42 -> 假和真)= 假。

这就是它返回 0 的原因。

(0 或 42-> 假或真)= 42

在这种情况下,由于操作数 42,语句将为 True。因此在这种情况下,python 返回导致语句为 true 的操作数。

于 2016-11-09T04:07:58.940 回答