Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 和/或运算符返回值_Python_Operators_Logical Operators - Fatal编程技术网

Python 和/或运算符返回值

Python 和/或运算符返回值,python,operators,logical-operators,Python,Operators,Logical Operators,我在看a,在18'27“演讲者声称”一些人可能知道在Python中和和或返回两个值中的一个,而not总是返回一个布尔值。“什么时候出现这种情况 据我所知,和和或也返回布尔值。和和和或运算符确实返回它们的一个操作数,而不是像True或False那样的纯布尔值: >>> 0 or 42 42 >>> 0 and 42 0 而not始终返回纯布尔值: >>> not 0 True >>> not 42 False 请参阅Pyt

我在看a,在18'27“演讲者声称”一些人可能知道在Python中
返回两个值中的一个,而
not
总是返回一个布尔值。“什么时候出现这种情况


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

运算符确实返回它们的一个操作数,而不是像
True
False那样的纯布尔值:

>>> 0 or 42
42
>>> 0 and 42
0
not
始终返回纯布尔值:

>>> not 0
True
>>> not 42
False
请参阅Python文档中标准库参考中的表:

来自:

如果运算符的参数为false,则运算符不生成True,否则为false

表达式x和y首先计算x;如果x为false,则返回其值;否则,计算y并返回结果值

表达式x或y首先计算x;如果x为真,则返回其值;否则,计算y并返回结果值

Python的
运算符返回第一个Truth-y值或最后一个值并停止。这对于需要回退值的常见编程赋值非常有用

就像这个简单的例子:

print my_list or "no values"
如果列表中有任何内容,它将打印
我的\u列表
。否则,它将打印
无值
(如果列表为空,或
…)

一个简单的例子:

>>> my_list = []
>>> print my_list or 'no values'
no values
>>> my_list.append(1)
>>> print my_list or 'no values'
[1]
>>> my_list = None
>>> print my_list and my_list.pop()
None
>>> my_list = [1]
>>> print my_list and my_list.pop()
1
使用
,返回第一个False-y值或最后一个值并停止的恭维语,在需要防护而不是回退时使用

像这个:

my_list and my_list.pop()
这很有用,因为您不能在
None
[]
上使用
list.pop
,这是列表的常见优先值

一个简单的例子:

>>> my_list = []
>>> print my_list or 'no values'
no values
>>> my_list.append(1)
>>> print my_list or 'no values'
[1]
>>> 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被视为假

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

这就是它返回0的原因

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


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

您知道返回的操作数顺序吗?从早到晚?确定结果的第一个值(从左到右)(即truish或falsish)是结果。可能会让您感到困惑的是,您可以在似乎需要布尔值的上下文中使用任何数据类型。“if 17:blah”是合法的。“is false”部分有点令人困惑。它更像是等于false或在
if
中求值False@Adam不,这绝对不是“等于假”“。例如,
0
[]
都是false,但只有第一个等于
false
。上一节详细解释了实际规则,但在头脑中保持清醒仍然有点混乱。这就是为什么在现实生活中,每个人(包括核心开发人员)都会说“真”和“假”,但参考文档避免了这一点。至于解释器对“假”的实际评估方式,我相信2.7在任何地方都不能完全定义它,尽管您可以从
\uuuu nonzero\uuuu
文档中很好地猜测它的意思是
x.\uu nonzero\uuuu()==0,除了AttributeError:x.\uu len\uuu()==0,除了AttributeError:False