13. 运算符

117 阅读4分钟

概念理解

Python中运算符的意思就是进行运算的操作符,诸如加减乘除一类的运算,基本从数学上直接概念可以迁移过来,只是有些运算符又在符合程序思路上有一定改变。

本文分算术运算符、比较运算符、赋值运算符、逻辑运算符、成员运算符、身份运算符、位运算符、运算符优先级、扩展九个小节进行解释

一,算术运算符

加、减、乘、除、取模(返回余数)、幂、整除(除完向小取整)

a = 3
b = 2

#加
print(a + b)

#减
print(a - b)

#乘
print(a * b)

#除
print(a / b)

#取模
print(a % b)

#幂
print(a ** b)

#整除
print(a // b)

输出为

5
1
6
1.5
1
9
1

二,比较运算符

  • ==:等于
  • !=:不等于
  • >:大于
  • <:小于
  • >=:大于或等于
  • <=:小于或等于

返回True或False

a = 3
b = 2

print(a == b)

print(a != b)

print(a > b)

print(a < b)

print(a >= b)

print(a <= b)

输出为

False
True
True
False
True
False

三,赋值运算符

  • =:简单的赋值运算符

下面的赋值运算符计算方法都是把符号后面的数据使用符号代表运算到前面的数据,再把得到的结果赋值给前面的变量

  • +=:加法赋值运算符

  • -=:减法赋值运算符

  • *=:乘法赋值运算符

  • /=:除法赋值运算符

  • %=:取模赋值运算符

  • **=:幂赋值运算符

  • //=:取整赋值运算符

a = 20
b = 3

a += b
print(a)

a -= b
print(a)

a *= b
print(a)

a /= b
print(a)

a %= b
print(a)

a **= b
print(a)

a //= b
print(a)

输出为

23
20
60
20.0
2.0
8.0
2.0

四,逻辑运算符

  • and:布尔"与"(有假返假元素,都为假返左边,都为真烦右边,空列表/元组/字典/集合都被认定为False)
  • or:布尔"或"(有真返真元素,都为真返左边,都为假返右边)
  • not:布尔"非"(假,返回 True;真,返回 False)
a = 2
b = []
c = 0

print(a and b)
print(a and c)
print(b and c)

print(a or b)
print(a or c)
print(b or c)

print(not a)
print(not a)
print(not b)

输出为

[]
0
[]
2
2
0
False
False
True

涉及内置函数 all(iterable) / any(iterable)

  • all():如果 iterable 的所有元素均为真值(或 iterable 为空)则返回 True

  • any():如果 iterable 的任一元素为真值则返回 True(可迭代对象为空,返回 False)

print(all(['False', 'None', ' ', '0']))

print(any([False, None, '', 0]))

输出为

True
False

五,成员运算符

返回布尔值:True,False(判断对象中是否存在某个元素)

  • in:在其中
  • not in:不在其中
lst = [1, 2, 3, '4']
a = 4 in lst
b = '4' in lst

c = 4 not in lst
d = '4' not in lst
print(a, b, c, d)

输出为

False True True False

六,身份运算符

前面有讲赋值的概念,这个运算符就是判断是否引用同一个对象,返回布尔值:True,False

  • is:两个标识符是不是引用自一个对象
  • is not:两个标识符是不是引用自不同对象
a = 256
b = a

print(a is b)
print(a is not b)
print(id(a))
print(id(b))

输出为

True
False
1717327456656
1717327456656

七,位运算符

位运算符是把数字转成二进制来进行计算的

  • &:按位与
  • |:按位或
  • ^:按位异或
  • ~:按位取反 ~x = -(x + 1)
推导:
(1)整数在计算机中是以补码的形式储存的
(2)正数的反码和补码都与原码相同
(3)负数的反码是对除符号位全部取反,补码是符号位全部取反后在最后+1(即反码+1)
(4)数据存储其实是还有符号位的,如9为0 1001,第一个0代表正号
(5)如对9取反,是对9的补码(01001)取反(10110),然后这得到应该是补码,再转换成原码(11010),所以为-10
(6)一般推导,对正数x按位取反,先对其补码每位都取反,得到一个负数的补码,再转换成原码(相当于就是符号位变负,数值+1)得到的应该是-(x + 1);负数同理
  • <<:左移
  • >>:右移
a = 8 #二进制为1000
b = 9 #二进制为1001
print(a & b)
print(a | b)
print(a ^ b)
print(~ b) #注意有0 1001先取反变为1 0110,再转变为原码为1 1010,即-10
print(b<<1) #变为10010
print(b>>1) #变为100

输出为

8
9
1
-10
18
4

八,运算符优先级

优先级的意思就是同时出现的时候,优先执行优先级高的,就如同小学数学里面要优先计算乘除法再去计算加减法一样

直接引用别人整理好的如下表,从低到高优先级

image.png

image.png

九,扩展(+,+=,*的拼接作用)

+、+=、* 还可以对字符串、列表、元组进行拼接,如下

a = '1'
b = '2'
print(a + b)
a += b
print(a)
print(a * 3)

输出为

12
12
121212