与/或运算符返回值

40 投票
4 回答
40643 浏览
提问于 2025-04-16 08:42

我在看一段关于高级Python或理解Python的2007年视频,视频到18分27秒时,讲者说“有些人可能知道,在Python中,andor会返回两个值中的一个,而not总是返回一个布尔值。”这是什么时候的事呢?

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

4 个回答

24

来自Python文档的内容:

运算符 not 的作用是:如果它的参数是假的,就返回真;否则返回假。

表达式 x and y 首先会计算 x;如果 x 是假,就返回 x 的值;如果 x 是真,就继续计算 y,并返回 y 的值。

表达式 x or y 也是先计算 x;如果 x 是真,就返回 x 的值;如果 x 是假,就计算 y,并返回 y 的值。

Python 的 or 运算符会返回第一个为真的值,或者最后一个值,然后停止。这在编程中很有用,特别是当你需要备用值的时候。

比如这个简单的例子:

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 的话,它会返回第一个为假的值,或者最后一个值,然后停止。这种情况适合用来做保护,而不是备用。

比如这个:

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

在这两种情况下,返回的都是非布尔值,并且没有抛出异常。

42

请查看Python文档中的这个表格,它来自标准库的参考资料:

布尔运算

65

在编程中,andor 这两个运算符返回的是它们其中一个操作数,而不是简单的布尔值,比如 TrueFalse

>>> 0 or 42
42
>>> 0 and 42
0

not 运算符总是返回一个简单的布尔值:

>>> not 0
True
>>> not 42
False

撰写回答