Python和/或运营商的返回值

问题描述:

我在看一个2007 video on Advanced Python or Understanding Python,并在18'27" 说话的权利‘因为有些人可能知道在Python andor返回这两个值中的一个,而not总是返回一个布尔值。’当有这个据我所知,andor返回布尔值,也一直是这样?Python和/或运营商的返回值

+0

什么可能会让你起床是你可以在似乎需要布尔值的上下文中使用任何数据类型。 '如果17:blah'是合法的。 – 2010-12-18 15:07:08

andor运营商做回自己的操作数,而不是一个纯粹的布尔值,像TrueFalse

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

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

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

你知道返回的操作数的顺序是什么吗?首先到最后? – ash 2010-12-18 11:38:28

+8

决定结果的第一个值(从左到右)(即歪头或错误)是结果。 – 2010-12-18 11:40:12

+0

确实返回其操作数之一。 ???逻辑不正确。请看我的答案。 – 2016-11-09 04:18:21

参见this表从标准库参考在Python文档:

Boolean Operations

+1

'假'部分有点混乱。它更像是等于假,或者用if来评估为False – Adam 2016-09-08 14:56:51

Python docs

如果参数为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,返回第一个虚假的y值,或者最后一个值,并停止,恭维被使用。

赞一个:

my_list and my_list.pop() 

,因为你不能使用list.popNone,或[],这是列出了常见的前值,这是非常有用的。

一个简单的例子:

>>> 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 and True)= False。

这就是为什么它返回0

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

在这种情况下,说明会因为操作数42也是如此。所以Python在这种情况下返回导致语句为真的操作数。