python和/或运算符返回值
我正在观看2007年的高级Python或了解Python视频 ,而在18'27“这位演讲者声称”正如有些人可能知道Python and
and or
返回两个值之一,而not
返回总是一个布尔值。是这样吗?
据我所知,还有or
返回布尔值。
and
和or
运算符确实返回了它们的一个操作数,而不是True
或False
的纯布尔值:
>>> 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返回导致语句为真的操作数。