python布尔系列_python-布尔运算

——《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.

北京

2015-7-17

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值