——《Python学习手册》读书笔记
真值测试
在Python中:
任何非零数字或非空对象都为真
数字零、空对象以及特殊对象None都被认作是假
比较和相等测试会递归地应用在数据结构中
比较和相等测试会返回True或False(1和0的特殊版本)
布尔and和or运算符会返回真或假的操作对象
Python中有三种布尔表达式运算符:
X and Y
X or Y
not X
值比较会返回True或False作为其真值结果(其实是整数1和0的特殊版本,打印时不同但其实完全一样)。接下来看一些例子:
>>>
2<3,3<2
(True,
False)
另一方面,and 和 or运算符总会返回对象
(不是运算符左侧的对象就是右侧的对象),而不是值True或False。如果我们在if或其他语句中测试其结果,总会如预期的结果那样(每个对象的本质上不是真就是假)。
>>>2or3,3or2
(2,3)
>>>[]or3
3
>>>2and{}
{}
>>>[]and{}
[]
Python中,运算是短路计算。就or测试而言,Python会由左至右求算操作对象,然后返回第一个为真的操作对象,在找到的第一个真值操作数的地方停止。and
运算也是类似。
if/else三元表达式
考虑下列语句,根据X的真值把A设成Y或Z。
ifX:
A= Y
else:
A= Z
用四行代码编写似乎太浪费了。Python 2.5 引入了新的表达式格式,让我们可以在一个表达式中编写出相同的结果:
A= YifXelseZ
注意,Python的X if Y else Z和C的Y?X:Z的顺序有点不同。下面看一些例子:
>>>
A
= 't'
if
'spam'
else
'f'
>>>
A
't'
>>>
A
= 't'
if
''
else
'f'
>>>
A
'f'
事实上,相同的效果可以小心地用and和or运算符的结合实现,因为它们不是返回左边的对象就是返回右边的对象:
A= ((XandY)orZ)
但有个问题:你得假定Y是布尔真值。如果是这样,效果就相同。 此外,使用下列表达式也是类似的,因为bool函数会把X转化成对应的整数1或0:
A = [Z,Y][bool(X)]
然而,这并不完全相同,因为这样不会做短路运算,无论X值是什么,总是会执行Z和Y。
——————————————————————————————————
damant
The quieter you become,the more you are able to
hear.