我正在观看2007 video on Advanced Python or Understanding Python,并且在18时27分“发言者声称”有些人可能知道Python and
和or
会返回两个值中的一个,而not
1}}总是返回一个布尔值。“这是什么情况?
据我所知,and
和or
也会返回布尔值。
答案 0 :(得分:43)
and
和or
运算符会返回其中一个操作数,而不是像True
或False
这样的纯布尔值:
>>> 0 or 42
42
>>> 0 and 42
0
not
总是返回一个纯布尔值:
>>> not 0
True
>>> not 42
False
答案 1 :(得分:27)
请参阅Python文档中标准库参考的this表:
答案 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.pop
或None
上使用[]
,这是列表的常见先前值。
一个简单的例子:
>>> 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返回操作数,导致语句为真,在这种情况下。