2020-09-18(运算符)

Python运算符(第四讲)

运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。例如:2+3,其操作数是2和3,而运算符则是“+”
运算符的分类:
算术运算符
赋值运算符
比较运算符(关系运算符)
逻辑运算符
条件运算符(三元运算符)

  • (1)算术运算符

• 加法运算符 表现形式 +
• 减法运算符 表现形式 -
• 乘法运算符 表现形式 *
• 除法运算符 表现形式 /
• // 整除,只会保留计算后的整数位,总会返回一个整型
• % 取余,求两个数相除的余数
• ** 幂运算,求一个值的几次幂
• ** 开平方
在这里插入图片描述

  • 赋值运算符

+= -= *= /= %= **= //= 就是 x = x -n 形式有点像缩写
在这里插入图片描述

  • 比较运算符
  • 比较运算符用来比较两个值之间的关系,总会返回一个布尔值.如果关系成立,返回True,否则返回False

比较左侧值是否大于右侧值 >
比较左侧的值是否大于或等于右侧的值 >=
比较左侧值是否小于右侧值 <
比较左侧的值是否小于或等于右侧的值<=
特殊的比较方式:
== 比较两个对象的值是否相等,这里提到的比较的是内存中对象的的值(value)
is 比较两个对象是否是同一个对象,比较的是对象的id
is not 比较两个对象是否不是同一个对象,比较的是对象的id

  • 逻辑运算符
  • not 逻辑非

• not可以对符号右侧的值进行非运算对于布尔值,非运算会对其进行取反操作,True变False,False变True
• 0、空串、None、list[] 还有一些表示空性的值会转换为False ,其余的都为True
在这里插入图片描述

  • and 逻辑与

• and可以对符号两侧的值进行与运算。 只有在符号两侧的值都为True时,才会返回True,只要有一个False就返回False
• 与运算是找False的,如果第一个值为False,则不再看第二个值

  • or 逻辑或

•或运算两个值中只要有一个True,就会返回True
•或运算是找True
或运算规则是找True, 如果第一个值是True, 则不看第二个值,直接返回第一个值,否则返回第二个值

  • 不是布尔值的与(and) 运算

非布尔值 •与运算是找False的 0、空串、None、list[] 还有一些表示空性的值会转换为False ,其余的都为True
在这里插入图片描述

  • 不是布尔值的或(or) 运算

非布尔值 •或运算是找True的 如果第一个值是True, 则不看第二个值,直接返回第一个值,否则返回第二个值
在这里插入图片描述

  • 条件运算符(三元运算符)
  • 条件运算符在执行时,会先对条件表达式进行求值判断
  • 如果判断结果为True,则执行语句1,并返回执行结果
  • 如果判断结果为False,则执行语句2,并返回执行结果
  • 语法: 语句1 if 条件表达式 else 语句2
    在这里插入图片描述

在这里插入图片描述

  • 运算符的优先级和扩展知识点

运算符优先级参照表
在这里插入图片描述
例 + - * / () 算术运算符有点接近数学中的运算符规则优先级别来运算,小括号优先级别比较高
在这里插入图片描述
在这里插入图片描述
综合上面推算得到 假设 or 比 and 优先级低:or 比 and 低的时候 4 and 5 先执行得到5 2 or 4 后执行得到2 所以综合前面得到 or 比 and 优先级低得到2
扩展 变量 列表 、字典 的内存知识点
a = 1
b = 1
print (id(a),id(b))
a = [1,2,3,4,5]
b = [1,2,3,4,5]
print (id(a),id(b)) #id 34859776 34886912 # 列表在内存中 是由每个元素 id 组成 不一样 每次创建列表时候都是引用过来的 Type、value类型一样 (id(a),id(b))不一样
print (id(a),id(b)) #id 34859776 34886912 # 列表在内存中 是由每个元素 id 组成 不一样 每次创建列表时候都是引用过来的 Type、value类型一样 (id(a),id(b))不一样

a = [1,2,3,4,5]
b = a
print(id(a),id(b)) #id 34852224 34852224 # 这个时候id地址会一样 b 是引用a 的id 所以一样

import copy
a = [1,2,3,4,5]
b = copy.copy(a)
print(id(a),id(b)) #id 36087232 36039424 # copy 每次创建列表时候都是引用过来的 相当于创建时候单独再次赋值 Type、value类型一样 (id(a),id(b))不一样
#假如限制修改 其中一个列表某个元素 另外一个并不会改变
a[2] = 10
print(a,b)
#字典 key : value 形式
c = {‘a’ : 1 , ‘b’ : {‘0’: 2, ‘1’ : 3 , ‘2’ : 4}}
d = copy.copy©
print(id©,id(d)) # 34860544 36426944
c[‘b’][‘2’] = 10
print(c,d) # {‘a’: 1, ‘b’: {‘0’: 2, ‘1’: 3, ‘2’: 10}} {‘a’: 1, ‘b’: {‘0’: 2, ‘1’: 3, ‘2’: 10}} 这里修改了其中一个另一个并不会修改不成立

这里 字典 里面还有字典 深层次的字典 在公共区域内存创建的 id 外层字典只是在引用 第二层字典 的id 第一层和第二层的字典是两个独立 内存

copy.copy (浅 Copy)复制不了第二层的内存只能引用, 所以修改深层次的值时候会同时修改整个字典的引用部分的字典

d = copy.deepcopy©
d[‘b’][‘2’] = 50
print(c,d)# {‘a’: 1, ‘b’: {‘0’: 2, ‘1’: 3, ‘2’: 10}} {‘a’: 1, ‘b’: {‘0’: 2, ‘1’: 3, ‘2’: 50}} 接近上面浅层问题 deepcopy© (深copy)

copy.deepcopy(x) (深 Copy) 不管是三层还是更多层次,深 Copy都能解决多层次的引用问题,不会修改字典的深层次字典值时候会影响另外一个字典

深Copy 一个多层次字典时候新的字典都是在创建独立的id 多层次列表也是同原理

e = [1,2,3,4,5,[‘a’,‘b’,‘c’]]
f = copy.copy(e)
e[5][1] = 20
print(e,f)#[1, 2, 3, 4, 5, [‘a’, 20, ‘c’]] [1, 2, 3, 4, 5, [‘a’, 20, ‘c’]]
f = copy.deepcopy(e)
f[5][1] = 10
print(e,f)#[1, 2, 3, 4, 5, [‘a’, 20, ‘c’]] [1, 2, 3, 4, 5, [‘a’, 10, ‘c’]]

作业

  • 第一题以4种格式化字符串的方式来实现 521 xxx 嫁给我好吗?

str = ‘521 %s,嫁给我好吗’
print(str%‘baby’) # 占位符传参
str = ‘521 ’ +‘baby’+’,嫁给我好吗’ print(str) #拼接
str = f’521 {“baby”}’’,嫁给我好吗’ #f格式化字符串 print (str)#
str =‘521 {},嫁给我好吗’ print(str.format(‘baby’)) # format 格式化字符串

  • 第二题现在有a b c三个变量,三个变量中分别保存有三个数值,请通过条件运算符获取三个值中的最大值

a,b,c = 70 , 90 ,100 max_num1 = a if a > b else b max_num2 = max_num1
if max_num1 > c else c print (max_num2) max_num =max(a,b,c) if

max(a,b,c)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

先Q一下

谢谢打赏,一起加油哦!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值