运算符种类
- 算术运算符
- 比较运算符
- 赋值运算符(有惊喜)
- 逻辑运算符
- 身份运算符
- 成员运算符
- 布尔运算符(拓展讲解,要了解假条件)
一、算术运算符
print(10 + 1)
print(10 - 1)
print(10 * 1)
print(10 / 3) #3.3333333333333335
print(10 //3) # 取整 3
print(10 % 3) # 取余 1 10 /3 = 3 余1
print(10 **3) # 幂 1000 10的三次方
二、比较运算符
print( 1 > 2) #False
print( 1 >= 2) #False
print( 1 < 2) #True
print( 1 <= 2) #True
print( 1 == 2) # False
print( 1 != 2) #True
三、赋值运算符
3.1 普通赋值
a = 10 #单赋值
a,b = 1,'a' # 多赋值(按顺序对应)
3.2 增量赋值
# 先解释下:以 a += 1 举例 a = a +1 a = 10 + 1 = 11
# 那么问题来了,a += 2*3 等于多少呢?
# 实际上,可以把 += 是最后算的
# 所以: a = a + (2*3) ---> a = 10 + (2*3) = 16 而不是 a = (a + 2) *3 = (10+2) *3 =36
a += 1
a -= 1
a *= 3
a /= 3
a %= 3
a //= 3
a **= 3
3.3 链式赋值
介绍:有时候我们向将 多个变量名 赋值 同一个变量值,但是 a = 10 b=10 会显得麻烦,也比较浪费内存空间。
那么有什么办法可以更简单实现呢?
# 通过把一个变量值 赋值 给个变量名
# 多个变量赋值为 0 更为常见
a = b = c = 0
e = f = g = '你好'
3.4 交叉赋值(交换赋值变得方便)
3.4.1 交换赋值实现:
# 交叉赋值实现 a - b
# | |
# t
a = 10
b = 11
# 找个临时变量
temp = a # 这时候 temp,a 都指向 10 内存地址
a = b # 这时候 a,b 指向 11 内存地址
b = temp # 这时候 temp,b 指向 10 内存地址
3.4.2 交叉赋值用法
a,b = 1,2
a,b = b,a
print(a) # 2
print(b) # 1
3.5 解压赋值
# 针对列表,元组
l1 = ['aa','bb','cc','dd']
# 按顺序赋值
a,b,c,d = l1
print(a,b,c,d) # aa bb cc dd
# 按照位置获取,取首尾
a,*qita,d = ('aa','bb','cc','dd')
print(a,d) # aa dd
print(qita) # ['bb', 'cc'] 剩余元素会按照列表的形式返回
# 解释这件事, * 是任意位置,qita 是剩余元素,这里的qita 是自己定义的
# 再来一遍
*qita1,c,*qita2 = ('aa','bb','cc','dd') # 错误,为什么?因为你不知道qita1取了几个,也不知道qita2取了几个,所以不能判断c取得位置是哪个
# 针对字典,只能取到key
x,y,z=dic={'a':1,'b':2,'c':3}
print(x,y,z) # ('a', 'b', 'c')
四、逻辑运算符
优先级:非(not) > 且 (and) > 或(or) 短路:多条件复合时,从头开始找到那个符合条件的地方 并返回其条件
# 用法:
# not : not 就是条件取反的意思
print(not 1 ==2) # true 对1==2取反,因为 1==2 为 false 取反 true
# and : 且的意思,全真才真,有假就假
print(1 > 0 and 1 < 2) # true 1>0 true 1<2 true -->true
print(1 < 0 and 1 < 2) # false 1<0 false 1<2 true -->false
# or :或的意思,全假才假,有真就真
print(1 > 0 or 1 < 2) # true 1>0 true 1<2 true -->true
print(1 < 0 or 1 < 2) # true 1<0 false 1<2 true -->true
print(1 < 0 or 1 > 2) # false 1<0 false 1<2 false -->false
短路运算:惰性原则
# 短路原则:懒惰原则
# 什么叫短路呢?多条件复合,从头到尾执行,符合条件就退出,并返回条件
# 短路用法1:and 使用 : 条件为假 就跳出
print( 1==2 and 1> 0 and 2>1 and 1) # 执行到哪结束? 1==2 为什么?因为 1==2 条件为假
print( 1> 0 and 1 and 2>1) # 执行到哪结束? 2>1 为什么?因为执行到最后一个条件位置,可判断条件为真
# 短路用法2:or 使用 : 条件为真 就跳出
print( 1==2 or 1> 0 or 2>1 or 1) # 执行到哪结束? 1> 0 为什么?因为 1> 0 条件为真
print( 1< 0 or 1 or 2<1) # 执行到哪结束? 2<1 为什么?因为执行到最后一个条件位置,可判断条件为假
优先级比较 :not > and > or
3>4 and not 4>3 or 1==3 and 'x' == 'x' or 4 >3
请用括号分清条件:
步骤1:先找出not
(not 4 >3)
步骤2:再找出and
(3>4) and (not 4>3) (1==3) and ()'x' == 'x')
步骤3:最后将not和and条件合并,再去找or
(3>4) and (not 4>3) or (1==3) and ('x' == 'x')
((3>4) and (not 4>3) or (1==3) and ('x' == 'x')) or 4>3
假 not 假 假 真 真
假 假 真
假 真
真
五、身份运算符 is
# 主要用来判断id 即内存地址
# 在哪使用? str 、list、tuple、dict、set
a = 10
b =11
print(a is b ) # True 竟然是对的?因为小整数池,-1 -256 使用的内存地址都是一样的,pycharm特有。
六、成员变量 in not in
从两个关键字来说,in 是在什么里面吗? not in 不在什么里面?
所以:a in b 表示 a 是 b 的一部分?
# 主要用来判断某个元素是否在另一个大集合中存在
# 在哪使用? str 、list、tuple、dict、set
# 以列表为例
l1 = ['1','2','3']
print('1' in l1) # True
print('2' not in l1) # False
# 以字典为例
d1 = {'a':1,'b':2,'c':3}
print(1 in d1) # False 为什么呀?1 不是在字典里面吗? 原因:因为字典一般用来判断key不行试试
print('a' in d1) # True
# 提醒一下:其实好多情况下,对字典进行转换操作,只是对key生效,想要直接访问value 需要用其他方法
print(1 in d1.values()) # True
七、布尔运算符
布尔类型:
显性;
隐性
# 布尔类型,作为条件来说,其实只有两种,True 和False
# 但是一般来说,我们并不会直接得出True 和False
# 那么隐型来了:
0 , NONE ,空(str,list,tuple,dict,set)
# 当符合上诉条件的时候,我们可以判定这条件为假
# 使用:
if list:
print('列表不为空')
else:
print('列表为空')
if not str:
print('字符串为空')
else:
print('字符串不为空')
# 推荐一种方式:
if not len(xxx) == 0:
print('xxx不为空')
else
print('xxx为空')
et)
当符合上诉条件的时候,我们可以判定这条件为假
使用:
if list:
print('列表不为空')
else:
print('列表为空')
if not str:
print('字符串为空')
else:
print('字符串不为空')
推荐一种方式:
if not len(xxx) == 0:
print('xxx不为空')
else
print('xxx为空')