与/或运算符返回值
我在看一段关于高级Python或理解Python的2007年视频,视频到18分27秒时,讲者说“有些人可能知道,在Python中,and
和or
会返回两个值中的一个,而not
总是返回一个布尔值。”这是什么时候的事呢?
据我所知,and
和or
也会返回布尔值。
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
在编程中,and
和 or
这两个运算符返回的是它们其中一个操作数,而不是简单的布尔值,比如 True
或 False
:
>>> 0 or 42
42
>>> 0 and 42
0
而 not
运算符总是返回一个简单的布尔值:
>>> not 0
True
>>> not 42
False