我正在观看2007 年有关高级 Python 或理解 Python 的视频,并且在 18'27" 演讲者声称“正如某些人可能知道 Pythonand
并or
返回两个值之一,而not
返回总是一个布尔值。” ?
据我所知,and
也or
返回布尔值。
我正在观看2007 年有关高级 Python 或理解 Python 的视频,并且在 18'27" 演讲者声称“正如某些人可能知道 Pythonand
并or
返回两个值之一,而not
返回总是一个布尔值。” ?
据我所知,and
也or
返回布尔值。
and
and运算符确实返回它们的or
一个操作数,而不是像True
or这样的纯布尔值False
:
>>> 0 or 42
42
>>> 0 and 42
0
而not
总是返回一个纯布尔值:
>>> not 0
True
>>> not 42
False
请参阅Python 文档中的标准库参考中的此表:
来自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.pop
onNone
或[]
,它们是列表的常见先验值。
一个简单的例子:
>>> my_list = None
>>> print my_list and my_list.pop()
None
>>> my_list = [1]
>>> print my_list and my_list.pop()
1
在这两种情况下,都返回了非布尔值,并且没有引发异常。
需要为@Frédéric 的答案添加一些要点。
确实返回他们的操作数之一???
这是真的,但这不是这背后的逻辑。在 python 中,除 0 以外的数字被认为是 True,而数字 0 被认为是 False。
(0 和 42 -> 假和真)= 假。
这就是它返回 0 的原因。
(0 或 42-> 假或真)= 42
在这种情况下,由于操作数 42,语句将为 True。因此在这种情况下,python 返回导致语句为 true 的操作数。