今日内容:
1、垃圾回收机制详解
引用计数
标记清除
分代回收
2、与用户交互
接受用户输入
格式化输出
3、基本运算符
算数运算符
赋值运算符
比较运算符
逻辑运算符
成员运算符
身份运算符
4、流程控制(if判断)
if 条件 :
代码块
elif 条件 :
代码块
。。。
else :
代码块
----------上节课复习----------
----------今日内容-----------
1、垃圾回收机制详解(简称GC,python解释自带的一种机制)
解释器在执行代码的时候会申请内存空间,用来储存变量值;会在合适的时间回收这个用不到的变量值的内存空间。
1.1、引用计数
直接引用:变量值直接被捆绑给变量名
eg:x=10
y=x
z=x
间接引用(针对容器类型list&dict)
eg:l=['a',x] # 在内存中,列表先在一个小房间里放上索引对应的内存地址,'a'存的是'a'的内存地址,x存的是10的内存地址
print (l[1])
1.2、标记清除:扫描栈区,里面的变量名是否存活(有没有堆区里的地址直接引用);栈区的变量名(直接&间接都不存在)之后,清理所对应的堆区内的内存地址。
循环引用=>导致内存泄漏问题
eg:l1 = [111,]
l2 = [222,]
l1.append(l2)
l2.append(l1)
del l1 # 去掉列表l1的直接引用
del l2 # 去掉列表l2的直接引用
###!!!去掉两个列表的直接引用之后,两者之间还是存在着间接引用,但是两者已经互相访问不到了(这种情况就是内存泄漏)
1.3、分代回收
关于引用计数的扫描栈区频率&优化。
使用频率高的,提升一层权重,对这一层减低扫描频率;针对于使用频率低的扫描,从而优化工作效率。
2、与用户交互
2.1、接受用户输入
# python3中
input会将用户输入的所有内容都存成字符串类型
eg:age = input('请输入你的年龄: ')
age = int(age) # int只能讲纯数字的字符转成整型
# python2.7
raw_input():用法与python3的input一模一样
input():要求用户必须输入一个明确的数据类型,输入的是什么类型,就存成什么类型
2.2、格式化输出
%(python诞生之初就存在,各个版本都可以使用)
值按照位置与%s一一对应,少了多了都不行
eg:res = 'my name is %s my age is %s' %('egon','18')
print (res)
以字典的形式传值,没有位置的限制,根据key传值
res = "my name is %(name)s my age is %(age)s" %{"name":'egon',"age":'18'}
%s可以接受任意类型
eg:print ('my age is %s' %18)
print ('my age is %s' %[1,123])
%d只能接受int
eg:print ('my age is %d' %18)
str.format(兼容性好,从2.6开始引入)
按照位置取值
res = 'my name is {} my age is {}'.format('egon',18)
print (res)
res = 'my name is {0} my age is {1}'.format('egon',18)
print (res)
按照key=value传值
res = 'my name is {name} my age is {age}'.format(age=18,name='name')
print (res)
f''(3.5引入)
x = input('your name: ')
y = input('your age: ')
res = f'my name is {x} my age is {y}'
print (res)
###!!!常见的位format和f''
###!!!速度比较:f'' > format > %
###!!!推荐使用format
3、基本运算符
1、算数运算符
print (10 + 3)
print (10 \ 3) # 结果带小数
print (10 \\ 3) # 地板除,只保留整数部分
print (10 % 3) # 取模、取余数
print (10 ** 3) # 取模、取余数
2、比较运算符:>、>=、<、<=、==、!=
!= # 判断两个值是不是不相等
3、赋值运算符
3.3.1、=:变量的赋值
3.3.2、增量赋值
eg:age = 18
age += 1 # age = age + 1
print (age)
age *= 1
age /= 1
age %= 1
age **= 1
3.3.3、链式赋值
eg:z = y = x = 10
3.3.4、交叉赋值
eg:m = 10
n = 20
temp = m # 中间者交换值
m = n
n = temp
m,n = n,m # 交叉赋值,一行代码搞定上面三行
3.3.5、解压赋值
salaries = [111,222,333,444,555] # 取出五个月的工资
mon1 = salaries [0]
mon2 = salaries [1]
mon3 = salaries [2]
mon4 = salaries [3]
mon5 = salaries [4]
print (mon1,mon2,mon3,mon4,mon5)
mon1,mon2,mon3,mon4,mon5 = salaries # python自动与列表内的值一一对应,进行赋值;左侧对应的变量名多了少了都不行
print (mon1,mon2,mon3,mon4,mon5)
引入*,可以帮我们取两头的值,无法取中间的值:
取前三个值 eg:x,y,z,*_ = salaries # *代表全部,_当成剩下的变量名,通常当一个占位变量名。
取后三个值 eg:*_,x,y,z = salaries
比较运算符
逻辑运算符
not、and、or
区分优先级:not>and>or
浙公网安备 33010602011771号