python和/或运算符返回值

时间:2010-12-18 11:32:37

标签: python operators logical-operators

我正在观看2007 video on Advanced Python or Understanding Python,并且在18时27分“发言者声称”有些人可能知道Python andor会返回两个值中的一个,而not 1}}总是返回一个布尔值。“这是什么情况?

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

4 个答案:

答案 0 :(得分:43)

andor运算符会返回其中一个操作数,而不是像TrueFalse这样的纯布尔值:

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

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

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

答案 1 :(得分:27)

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

Boolean Operations

答案 2 :(得分:16)

来自Python docs

  

如果参数为false,则运算符不产生True,否则返回False。

     

表达式x和y首先计算x;如果x为false,则返回其值;否则,评估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()

这很有用,因为您无法在list.popNone上使用[],这是列表的常见先前值。

一个简单的例子:

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

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

答案 3 :(得分:0)

需要在@Frédéric的回答中添加一些要点。

  

返回其中一个操作数???

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

  

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

这就是它返回0的原因。

  

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

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