Python和/或运营商的返回值
我在看一个2007 video on Advanced Python or Understanding Python,并在18'27" 说话的权利‘因为有些人可能知道在Python and
和or
返回这两个值中的一个,而not
总是返回一个布尔值。’当有这个据我所知,and
和or
返回布尔值,也一直是这样?Python和/或运营商的返回值
。
的and
和or
运营商做回自己的操作数,而不是一个纯粹的布尔值,像True
或False
:
>>> 0 or 42
42
>>> 0 and 42
0
鉴于not
总是返回一个纯布尔值:
>>> not 0
True
>>> not 42
False
你知道返回的操作数的顺序是什么吗?首先到最后? – ash 2010-12-18 11:38:28
决定结果的第一个值(从左到右)(即歪头或错误)是结果。 – 2010-12-18 11:40:12
确实返回其操作数之一。 ???逻辑不正确。请看我的答案。 – 2016-11-09 04:18:21
如果参数为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.pop
上None
,或[]
,这是列出了常见的前值,这是非常有用的。
一个简单的例子:
>>> 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在这种情况下返回导致语句为真的操作数。
什么可能会让你起床是你可以在似乎需要布尔值的上下文中使用任何数据类型。 '如果17:blah'是合法的。 – 2010-12-18 15:07:08