垃圾回收机制与流程控制

1|0垃圾回收机制与流程控制

img

1|1一、垃圾回收机制

解释器在执行到定义变量的语法时,会申请内存来存放变量的值,而内存的容量是有限的,当一个变量值没有用了(简称垃圾),就该其占用的内存给回收掉,Python通过垃圾回收机制自动管理。 垃圾回收机制:专门回收不可用的变量值所占用的内存空间。

1|21.为什么要用垃圾回收机制

程序运行过程中会申请大量内存空间,二对于一些无用的内存空间如果不及时清理的话会导致内存溢出,最终导致程序崩溃,为了程序更好的运行与更好管理内存,Python解释器自带垃圾回收机制,清理垃圾,释放管理内存。

1|32.垃圾回收机制的原理分析

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 当内存占用量达到临界值时,程序会自动停止,然后扫描所有的数据,并且只给产生循环引用的数据打上标记,然后一次性清除

image

3.分代回收 垃圾回收机制的频繁运行也会损耗各项资源的 l1,l2,l3(越往下,检测频率越低) 核心: 分代指的是根据存活时间来为变量划分不同的等级(也就是不同的代) 在多次扫描情况下,都没有被回收的变量,机制就会认为,该变量是常用变量,对其扫描的频率会降低。

image

1|4二、流程控制理论

流程控制:指控制程序的执行流程

1|01.顺序结构

从上往下依次执行,我们之前编写的代码都属于该结构

image

1|02.分支结构

事物的执行会根据条件的不同做出不同的执行策略

image

1|03.循环结构

事物的执行会根据某个条件出现重复

image

1|5三、流程控制小知识点

1.python中使用代码的缩进来表示代码的从属关系 从属关系:缩进的代码(子代码)的执行取决于上面的没有缩进的 2.并不是所有代码都可以拥有子代码的(if有的) 3.如果多行子代码同属于一个父代码,则需要他们有相同的缩进量 4.缩进可以按空格或者tab键 5.某一行代码需要写子代码时,那么这一行的结尾肯定需要冒号 6.相同缩进量的代码彼此同起同坐,按照顺序执行

img

1|6四、流程控制理论之分支结构

1|01.单if分支结构

if 条件: 条件成立才会执行的代码块 eg: username = input('username-->>') if username == 'jia': print('你好')

image

1|02.if...else...分支结构

if 条件: 条件成立之后执行的子代码 else: 条件不成立执行的子代码 eg: username = input('username-->>') if username == 'jia' print('你好,jia') else: print('不好意思,认错了')

1|03.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('不及格')

image

1|04.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('什么都没吃')

1|7四、流程控制理论之循环结构

循环结构就是让一些代码反复的执行 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|8五、作业

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('登录次数超过三次,请稍后再尝试')

image

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

__EOF__

本文作者泡芙有点甜
本文链接https://www.cnblogs.com/zx0524/p/16735995.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   小王应该在学习!  阅读(341)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示