1、表达式
表达式=操作数+运算符
2、运算符
####1、加减运算实现a、b交换
a=1
b=1
a+=b
b=a-b
a-=b
###2、除法运算(/,%,//)除数不能为0,否则出错
###3、//运算规则:取小于或等于商的最大整数
print(5.5 // 3.2) #1
print(5.5 // -3.2) #2,因为真实值为-1.XX,比它小的最大整数就是-2喽
###4、%取模(取余)运算规则:模=被除数-地板除的商*除数
5.5 % 3.2 ###2.3 , 即:5.5-3.2*1=2.3
5.5 % -3.2 ###-0.9 ,即:5.5-(-3.2)*(-2)=-0.9
###5、 幂运算
print('2 ** 3 =', 2 ** 3)
print('2 ** 0 =', 2 ** 0)
print('2 ** -1 =', 2 ** -1)
print('2 ** 0.5 =', 2 ** 0.5) # 开平方
print('2 ** (1/3) =', 2 ** (1/3)) # 开立方
# 负数开平方,在实数范围是无解的,而在复数范围内则有解
print('(-2) ** 0.5 =', (-2) ** 0.5) # (8.659560562354934e-17+1.4142135623730951j)
# 幂运算不能导致除数为 0,否则运行时报错
#print('0 ** -1 =', 0 ** -1) # ZeroDivisionError: 0.0 cannot be raised to a negative power
###6、:=赋值运算符,=赋值操作符(:=组成表达式,=为语句)
a=1 #赋值语句
a:=1 #error,非语句
a=1+(a=1) #error,赋值语句不能作为表达式操作数
a=1+(a:=1) #赋值表达式
###7、比较运算符(优先级一致,不同于java,c)
##
== #比较的是值,而不在乎是否是同一对象
##
a,b,c=1,2,3
a < c > b #相当于 a < c and c > b
###8、逻辑运算符
and or not #not优先级最高
##
a=1
b=2
c= a and b #c=2,未短路等于后面的值
##
a=0
b=2
c=a and b #c=0,短路等于前面的值
##or同理
###9、身份运算符is(比较是否是同一对象,比的是id值)
##
a=b=1
a is b #True
###10、in运算符
# 判断字符串
s1 = 'hello'
print('he' in s1) # True
print('HE' in s1) # False
print('HE' not in s1) # True
# 判断列表
list1 = [1, 2, 3]
print(1 in list1) # True
print(10 not in list1) # True
###11、位运算符
##|、&、^、~规律如下
1 & x = x
0 & x = 0
1 | x = 1
0 | x = x
1 ^ x = ~x
0 ^ x = x
##<<、>>左右移
# 左移 3 位,右边空出 3 个位补 0
# 左移 n 位,相当于乘以 2 的 n 次方
print(1 << 3) # 0b1000 -> 8
# 右移 3 位,右边的 3 个位丢弃,左边补符号位(最高位 1 负数,0 正数)
# 右移 n 位相当于这个数除以 2 的 n 次方
print(0b1010 >> 3)
# 对 num 的第 n 位置 1,置 1 模型
num = 0b1001
n = 2
num |= 1 << n # num = num | (1 << n)
print(num)
# 对 num 的第 6,2 位置 1,置 1 模型
num |=((0x1f)<<2) #2-6置1,0x1f有5位,所以能改变6-2的所有位
# 对 num 的第 n 位清 0,清 0 模型
num = 0b1101
n = 2
num &= ~(1 << n) # num = num & (~(1 << n))
print(num)
#对 num 的第 6,2 位清 0,清 0 模型
num&=~((0x1f)<<2)#2-6置0
# 对 num 的第 n 位取反,取反模型
num = 0b1101
n = 2
num ^= 1 << n # num = num ^ (1 << n)
print(num)
# #对 num 的第 6,2 位取反,取反模型
num^=((0x1f)<<2) #2-6置0
###12、条件运算符
# 条件运算符:op1 if op2 else op3
# 运算符规则:
1)先判断 op2,如果是 True 则返回 op1 的值
2)False 就返回 op3
#
num1 = 11
num2 = 2
max = num1 if num1 > num2 else num2
print('max = ', max) #11
#
num1, num2, num3 = 2, 3, 1
max = (num1 if num1 > num3 else num3) if num1 > num2 else (num2 if num2 > num3 else num3)
print('max = ', max) 33
###13、表达式列表
>>> a=2,"3",4
>>> a
(2, '3', 4)
>>>