垃圾回收机制与流程控制
目录一、垃圾回收机制
解释器在执行到定义变量的语法时,会申请内存来存放变量的值,而内存的容量是有限的,当一个变量值没有用了(简称垃圾),就该其占用的内存给回收掉,Python通过垃圾回收机制自动管理。
垃圾回收机制:专门回收不可用的变量值所占用的内存空间。
1.为什么要用垃圾回收机制
程序运行过程中会申请大量内存空间,二对于一些无用的内存空间如果不及时清理的话会导致内存溢出,最终导致程序崩溃,为了程序更好的运行与更好管理内存,Python解释器自带垃圾回收机制,清理垃圾,释放管理内存。
2.垃圾回收机制的原理分析
1.引用计数
name = 'jia' 数据值jia的引用计数为1
name1 = 'jia' 数据值jia的引用计数为2
del name1 数据值jia的引用计数为1
当数据的引用计数为0的时候,就会被垃圾回收机制当做垃圾回收掉
当数据的引用计数不为0的时候,永远不会被垃圾回收机制回收掉
2.标记清除(主要针对循环引用问题)
eg:
l1 = [11, 22] # 引用计数为1
l2 = [33, 55] # 引用计数为1
l1.append(l2) # l1 = [11, 22, [33, 55]] 引用计数为2
l2.append(l1) # l2 = [33, 55, [11, 22]] 引用计数为2
del l1 # 断开变量名l1与列表的绑定关系 引用计数为1
del l2 # 断开变量名l2与列表的绑定关系 引用计数为1
当内存占用量达到临界值时,程序会自动停止,然后扫描所有的数据,并且只给产生循环引用的数据打上标记,然后一次性清除
3.分代回收
垃圾回收机制的频繁运行也会损耗各项资源的
l1,l2,l3(越往下,检测频率越低)
核心:
分代指的是根据存活时间来为变量划分不同的等级(也就是不同的代)
在多次扫描情况下,都没有被回收的变量,机制就会认为,该变量是常用变量,对其扫描的频率会降低。
二、流程控制理论
流程控制:指控制程序的执行流程
1.顺序结构
从上往下依次执行,我们之前编写的代码都属于该结构
2.分支结构
事物的执行会根据条件的不同做出不同的执行策略
3.循环结构
事物的执行会根据某个条件出现重复
三、流程控制小知识点
1.python中使用代码的缩进来表示代码的从属关系
从属关系:缩进的代码(子代码)的执行取决于上面的没有缩进的
2.并不是所有代码都可以拥有子代码的(if有的)
3.如果多行子代码同属于一个父代码,则需要他们有相同的缩进量
4.缩进可以按空格或者tab键
5.某一行代码需要写子代码时,那么这一行的结尾肯定需要冒号
6.相同缩进量的代码彼此同起同坐,按照顺序执行
四、流程控制理论之分支结构
1.单if分支结构
if 条件:
条件成立才会执行的代码块
eg:
username = input('username-->>')
if username == 'jia':
print('你好')
2.if...else...分支结构
if 条件:
条件成立之后执行的子代码
else:
条件不成立执行的子代码
eg:
username = input('username-->>')
if username == 'jia':
print('你好,jia')
else:
print('不好意思,认错了')
3.if...elif...else分支结构
if 条件1:
条件1成立之后执行的代码块
elif 条件2:
条件1不成立,条件2成立执行的代码块
elif 条件3:
条件1,条件2不成立,条件2成立执行的代码块
else:
上述条件都不成立时,执行的代码块
注意:中间的elif可以写多个,都是子代码只会执行一个
eg:
score = input('请输入你的成绩-->>')
score = int(score) # 讲字符串的整数转换成整型的整数
if score >= 90:
print('优秀')
elif score >= 80:
print('良好')
elif score >= 70:
print('一般')
elif score >=60:
print('及格')
else:
print('不及格')
4.if的嵌套使用
eg:
is_eat = True
is_drink = True
is_play = False
if is_eat:
print('吃了米饭')
if is_drink:
print('喝了八杯水')
if is_play:
print('玩了一下午')
else:
print('一直在学习')
else:
print('一天都没有喝水')
else:
print('什么都没吃')
四、流程控制理论之循环结构
循环结构就是让一些代码反复的执行
while 条件:
条件成立之后执行的子代码(循环体代码)
1.先判断条件是否成立
2.如果成立则执行循环体代码
3.循环体代码执行完毕后再次回到条件判断处,判断条件是否成立
4.如果成立,继续执行循环体代码
5.按照上面的依次执行,直到条件不成立才会解释循环
eg:
count = 1
while count < 5:
print('结束了')
count += 1
print('哈哈哈哈')
# 循环打印1~10,碰到6结束循环
count = 1
while count < 11:
if count == 6:
break # 强行结束代码体
print(count)
count += 1
# while循环体代码一旦执行到break会直接结束循环
# 循环打印1~10,碰到6结束本次循环 开始下一次循环
count = 1
while count < 11:
if count == 6:
count += 1
continue
print(count)
count += 1
额外知识点:
while 条件:
循环体代码
else:
循环体没有强制被结束的情况下,执行完毕就会执行else子代码
五、作业
1.根据用户输入内容打印其权限
'''
jason --> 超级管理员
tom --> 普通管理员
jack,rain --> 业务主管
其他 --> 普通用户
'''
方法1解答:
user_info = '''
jason --> %s
tom --> %s
jack,rain --> %s
其他 --> %s
'''
j = input('jason -->')
t = input('tom -->')
jr = input('jack,rain -->')
other = input('其他 -->')
print(user_info % (j, t, jr, other))
方法2解答:
a = {'jason': '超级管理员'}
b = {'tom': '普通管理员'}
c = {'jack': '业务主管', 'rain': '业务主管'}
name = input('请输入你的名字')
if name in a:
print('超级管理员')
elif name in b:
print('普通管理员')
elif name in c:
print('业务主管')
else:
print('普通用户')
2.编写用户登录程序
要求:有用户黑名单 如果用户名在黑名单内 则拒绝登录
eg:black_user_list = ['jason','kevin','tony']
如果用户名是黑名单以外的用户则允许登录(判断用户名和密码>>>:自定义)
eg: oscar 123
解答:
black_user_list = ['jason', 'kevin', 'tony']
username = 'oscar'
pwd = '123'
# user = {'oscar': '123'}
# name = input('请输入你的名字')
user = input('请输入你的用户名')
password = input('请输入你的密码')
if user in black_user_list:
print('你在黑名单内,拒绝登录')
elif user == username and pwd == password:
print('登录成功')
else:
print('请输入正确的用户名和密码')
3.编写用户登录程序
用户如果登录失败 则只能尝试三次
用户如果登录成功 则直接结束程序
解答:
count = 1
username = 'jia'
pwd = '123'
while count < 4:
count += 1
user = input('请输入你的用户名')
password = input('请输入你的用户名')
if username == user and pwd == password:
print('登录成功')
break
else:
print('登录次数超过三次,请稍后再尝试')
4.猜年龄的游戏
假设用户的真实年龄是18 编写一个猜年龄的游戏 获取用户猜测的年龄
基本要求:可以无限制猜测 每次猜错给出提示(猜大了 猜小了) 猜对则结束程序
拔高练习:每次猜测只有三次机会 一旦用完则提示用户是否继续尝试 用户通过输入n或者y来表示是否继续尝试 如果是y则继续给用户三次猜测机会 否则结束程序
解答:
age = '18'
count = 1
Y = 'y'
N = 'n'
while count < 4:
count += 1
age1 = input('请输入您的年龄')
if age == age1:
print('你猜对了')
break
if count < 2:
if age < 18:
print('猜小了')
count += 1
continue
else:
print('猜大了')
count += 1
continue
else:
input1 = input('是否继续尝试 ,按Y/N')
if input1 == Y:
count = 0
continue
if input1 == N:
break
标签:count,--,流程,回收,else,垃圾,print,input,代码
From: https://www.cnblogs.com/zx0524/p/16735995.html