python和/或运算符返回值

atp*_*atp 28 python operators logical-operators

我正在观看2007年关于高级Python或理解Python的视频,并且在18'27"发言者声称"有些人可能知道在Python中andor返回两个值中的一个,而not返回总是一个布尔值."这是什么情况下的情况?

据我所知,andor返回布尔.

Fré*_*idi 47

andor运营商做回自己的一个操作数,而不是一个纯粹的布尔值类似TrueFalse:

>>> 0 or 42
42
>>> 0 and 42
0
Run Code Online (Sandbox Code Playgroud)

not始终返回纯布尔值:

>>> not 0
True
>>> not 42
False
Run Code Online (Sandbox Code Playgroud)

  • 决定结果的第一个值(从左到右)(即,真实或虚假)就是结果. (9认同)
  • 您知道返回的操作数的顺序是什么吗?先到后? (2认同)

mga*_*lgs 28

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

布尔运算

  • @Adam不,这绝对不像“等于False”。例如,“0”和“[]”都是 false,但只有第一个等于“False”。实际规则已在上一节中详细解释,但要牢记在心仍然有点令人困惑。这就是为什么在现实生活中,每个人(包括核心开发人员)都会说“true”和“falsey”,但参考文档避免了这种情况。 (3认同)
  • '是假的'部分有点令人困惑.它更像是等于False或者在`if`到False中进行评估 (2认同)

Reu*_*ani 16

来自Python文档:

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

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

表达式x或y首先评估x; 如果x为真,则返回其值; 否则,将评估y并返回结果值.

Python的or运算符返回第一个Truth-y值或最后一个值,然后停止.这对于需要回退值的常见编程分配非常有用.

像这个简单的一个:

print my_list or "no values"
Run Code Online (Sandbox Code Playgroud)

这将打印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]
Run Code Online (Sandbox Code Playgroud)

and当你想要一个警卫而不是一个后备时,使用返回第一个假y值或最后一个值并停止的赞美.

像这个:

my_list and my_list.pop()
Run Code Online (Sandbox Code Playgroud)

这很有用,因为您不能使用list.popon None或者[]列表中常见的先前值.

一个简单的例子:

>>> my_list = None
>>> print my_list and my_list.pop()
None
>>> my_list = [1]
>>> print my_list and my_list.pop()
1
Run Code Online (Sandbox Code Playgroud)

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