day 2 运算符与分支结构
1.布尔值转换
python中任何类型的数据都可以转换成布尔值,所有为0、为空的值都会转换成False,其他的值都是True
举个栗子
print(bool(0), bool(0.0))
# False False
print(bool(100), bool(-1000), bool(''), bool(""), bool('False'), bool(' '))
# True True False False True True
并且在逻辑运算中如果表达式的值不是布尔值,就转换成布尔值再判断。
2.短路操作
and 的短路操作: 条件1 and 条件2 - 如果条件1是False,那么条件2对应的代码不会执行
or 的短路操作: 条件1 or 条件2 - 如果条件1是True,那么条件2对应的代码不会执行
False and print('====')
True or print('++++')
如上两段代码都没有执行后半部分语句就结束了。
print(5 and 3) # 3
print(5 or 3) # 5
print(0 and 3) # 0
当文本字符出现在逻辑语句中,就会进行布尔值转换,如第一句代码就打印了3,这是因为and逻辑语判断出前半部分为True,再判断后半部分,无论后半部分是否为False都会执行到该位置,所以就打印出了3。第二句代码同理,or逻辑语中会首先判断前半部分是否为True,如果为True就直接打印前半部分,产生短路操作后半部分不执行,当前半部分为False则会打印后半部分的值。第三句代码因为前半部分出现了False,所以就中断了执行,只执行前半部分,进行短路操作。
3.*位运算
位运算有:&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、>>(右移)、<<(右移)
应用1:判断整数的奇偶性 - 数字对1进行按位与运算,如果结果是1就是奇数,结果是0就是偶数
print(28 & 1, 10 & 1, 9 & 1)
# 0 0 0 0
print(11 & 1, 9 & 1, -23 & 1, 1005 & 1)
# 1 1 1 1
使用函数位运算可以大大提高运算效率,再关于2和2的倍数的运算中可以使用位运算来进行编程,在一些大型企业中很容易考察这类基础知识。
应用2:
数字 << N - 快速乘 2**N
数字 >> N - 快速整除 2**N
数字 << 1 - 快速乘2:数字*2
数字 >> 1 - 快速整除2:数字//2
print(4 << 1, 5 << 1, 5 << 2)
# 8 10 20
print(4 >> 1, 5 >> 1, -5 >> 1)
# 2 2 -3