Python运算表达式

136 阅读4分钟

运算表达式

算数表达式


  • 基本运算符:+ - * / 
  • Python2.x : 除法结果只会向复杂数据类型靠拢,两个整数相除,是否除净结果都为整数
  • Python3.x : 除法中无论有无复杂数据类型,结果都将精确到浮点数
  • 其他算数的结果类型取决于运算数字之中最复杂的类型
#python2.x
>>> 5 / 3 #2中两整数做除法,结果还是整数
1 #结果为整数
>>> 5 / 3.0
1.6666666666666667 #只有在参与运算的数据类型中含有浮点数,结果才会成为浮点数
#python3.x
>>> 5 / 3
1.6666666666666667 #3中两整数做除法,结果会精确到浮点数
>>> 5 / 3.0
1.6666666666666667

  • 特殊运算符

    • // 向下取整运算(地板除)
    • % 取余运算
    • ** 幂值运算
>>> 5 // 3
1
>>> 5 % 3
2
>>> 5 ** 3
125

除此之外,我们还可以使用round函数来控制返回结果的精度

>>> round(5 / 3) #可以获取到5/3的四舍五入结果
2
>>> round(5 / 3, 2) #控制返回结果的精度为2
1.67

逻辑表达式

表达式解释返回值类型
not aa的逻辑非bool
a and ba和b的逻辑与bool
a or ba和b的逻辑或bool
a is ba和b是同一个对象bool
a is not ba和b不是同一个对象bool

: 真真为真, 真假为假, 假假为假 : 真真为真, 真假为真, 假假为假 : 真为假,假为真

>>> a = 1
>>> not a #a的逻辑非
False
>>> b = 0
>>> a and b #ab的逻辑与
0
>>> a or b #ab的逻辑或
1

is逻辑语句判断的是否为同一个对象,首先需要值相同,其次数据地址相同

>>> a1 = [1,2,3,4,5]
>>> a2 = [1,2,3,4,5]
>>> a1 is a2 #a1和a2值虽相同,但并不是同一个数据对象
False
>>> id(a1)
2298768048584
>>> id(a2) #两数据地址并不相同
2298768048392

关系表达式

表达式解释返回值类型
a == ba,b是否值相等bool
a != ba,b是否值不等bool
a > ba是否大于bbool
a < ba是否小于bbool
a >= ba是否大于等于bbool
a <= ba是否小于等于bbool
>>> a = 1
>>> b = 2
>>> a == b
False
>>> a != b
True
>>> a > b
False
>>> a < b
True
>>> a <= b
True
>>> a >= b
False

位运算

表达式解释实际操作
~a按位取反-(a+1)
a << n左移n位-
a >> n右移n位-
a & ba和b按位与11>1 00>0 01>0
aba和b按位或11>1 00>0 01>1
a ^ ba和b按位异或01>1 11>0 00>0

二进制

计算机中真正存储的二进制为补码;位运算都是补码在进行运算 正数的原码,反码,补码都是其本身

类型+1-1负数求码规则
原码0000 00011000 0001第一位为符号位
反码0000 00011111 1110符号位不变,其余各位取反
补码0000 00011111 1111反码加一

这里举一个小例子 :

>>> a = 1
>>> ~a
-2

结果解释:

首先位运算都是补码在进行运算

1的补码为 : 0000 0001

首先按位取反的结果 : 0000 0001 > 1111 1110

1111 1110 为补码,对其求原码

将该补码看作原码,重新求出的补码即可

1111 1110   原码

1000 0001  反码 (最高位为1,为负数求码过程,符号伪不变,其余各位取反)

1000 0010  补码 (反码加一)

此时我们得到的1000 0010  则是-2的原码,所以~a的结果为-2


位运算小例子

实现两个变量值的替换 如 a = 1 , b = 2 ; 替换后结果为 a = 2 , b = 1;不允许出现第三个变量

#a: 0000 0001 1
#b: 0000 0010 2
>>> a = 1
>>> b = 2
>>> a = a | b #按位或
#a: 0000 0011 3
#b: 0000 0010 2
>>> b = a ^ b #按位异或
#a: 0000 0011 3
#b: 0000 0001 1
>>> a = a ^ b #按位异或
#a: 0000 0010 2
#b: 0000 0001 1
>>> a
2
>>> b
1