python和/或运算符返回值

我正在观看2007年的高级Python或了解Python视频 ,而在18'27“这位演讲者声称”正如有些人可能知道Python and and or返回两个值之一,而not返回总是一个布尔值。是这样吗?

据我所知,还有or返回布尔值。

andor运算符确实返回了它们的一个操作数,而不是TrueFalse的纯布尔值:

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

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

 >>> not 0 True >>> not 42 False 

从Python文档中的标准库引用中查看此表:

布尔运算

来自Python文档 :

如果操作符的参数为false,则操作符不会生成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 ,它返回第一个False-y值,或最后一个值,并停止恭维。

像这个:

 my_list and my_list.pop() 

这是非常有用的,因为你不能使用None或者[]上的list.pop ,这是列表中常见的值。

一个简单的例子:

 >>> 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以外的数字被认为是真,数字0被认为是False。

(o和42-> False和True)= False。

这就是为什么它返回0。

(0或42-> false或True)= 42

在这种情况下,由于操作数42,语句将为真。所以python返回导致语句为真的操作数。