python垃圾回收机制、流程控制理论、流程控制理论必备知识、分支结构、循环结构
垃圾回收机制
一些语言存放空间和释放都需要程序员自己去写代码完成,但是python不需要,python可以通过使用垃圾回收机制自动管理。
1引用计数
name = 'lei' 数据值lei引用计数为1 name1 = name 数据值lei引用计数+1 为2 del name1 数据值引用计数-1 为1
当数据身上计数值为0时就会被垃圾机制当作垃圾回收。
当数据值身上的引用计数不为0时永远不会被垃圾回收机制回收
2标记清除
为了解决循环引用的不足,python的底层不会单单只用引用计数器,引入了一个机制叫做标记清楚。主要针对循环引用问题。
height1 = [123, 321] # 引用计数为1 height2 = [111, 222] # 引用计数为1 height1.append(height2) #引用计数为2 height1 = [123, 321, 111, 222] height2.append(height1)#引用计数为2 height1 = [ 111, 222 123, 321] del height1 # 断开变量名height1与列表的关系 del height2 # 断开变量名height2与列表的关系
变为
当内存达到临界值时,程序会自动停止,然后扫面程序中所有的数据,并且给只产生循环引用的数据打上标志之后一次性清楚。
3分代回收
将第二个链表(可能存在循环引用的链表),维护成3个环状双向的链表:
0代: 0代中对象个数达到700个,扫描一次。
1代: 0代扫描10次,则1代扫描1次。
2代: 1代扫描10次,则2代扫描1次。
垃圾回收机制的频繁运行也会消耗各类资源,用0,1,2代分别对计数进行判断来处理数据价值。
流程控制理论
python流程控制大致可以分为三种:
-
顺序结构
-
分支结构
事物执行会根据条件的不同做出不同的执行策略。
-
循环结构
在编写代码时也会涉及到重复的执行某一段代码,这时就会用到循环控制语句。
流程控制必备知识
1.python中使用代码缩进来表示代码的从属关系。
name = 123 if name == 123: print(name)
2并不是所有的代码都可以拥用缩进的子代码
print() print() #就不是缩进的子代码
3如果有多行子代码属于同一夫代码,那么这些子代码需要保证相同的缩进量。
print() print()
4python中针对缩进量没有具体的要求,但是推荐4个空格。
5在某一行代码需要编写子代码时,那么比这一行代码的结尾肯定要冒号。
6相同缩进量的代码彼此之间平起平坐,按照顺序结构一次执行。
i = 5 if i < 10: print(i) print(i+1) print(i+2)
分支结构
1.单if分支结构
if 条件 条件成立后才会被执行 i = 5 if i < 10: print(i) print(i+1) print(i+2)
2.if...else...分支结构
if 条件: 条件成立之后执行的子代码 else: 条件不成立执行的子代码

3if...elif...else分支结构
if 条件1: 条件1执行的代码 elif 条件2: 条件1不成立条件2成立 elif 条件3: 条件1和条件2都不成立,条件3成立的子代码 else: 上述条件都不成立 执行的子代码

4if嵌套使用
proof = int(input("输入驾驶员每 100ml 血液酒精的含量:")) if proof < 20: print("驾驶员不构成酒驾") else: if proof < 80: print("驾驶员已构成酒驾") else: print("驾驶员已构成醉驾")
运行结果为:
输入驾驶员每 100ml 血液酒精的含量:10 驾驶员不构成酒驾
循环结构
反复执行的代码
关键字while主要表达形式如下:
while 条件表达式: 语句
与 if 语句相似,while 循环的条件表达式也无须括号,且表达式末尾必须添加冒号。当条件表达式计算结果为 True 时,执行下一行缩进的语句;若条件表达式计算结果为 False,则跳过该条语句继续向下执行。例如:
n = 10 sum = 0 i = 1 while i <= n: sum = sum + i i += 1 print("1 到 %d 之和为:%d" %(n,sum))
运行结果如下图:
1先判断条件是否成立
2如果成立就生成循环体里面的代码
3循环体执行完毕后再次回到条件判断处,判断条件是否成立,如果成立则会执行循环体内的代码。
按照上述的规律,直到条件不成立结束循环体内的代码。
关键字
break # 强制退出
continue # 跳过条件判断处
# continue 和 break 用法 i = 1 while i < 10: i += 1 if i%2 > 0: # 非双数时跳过输出 continue print i # 输出双数2、4、6、8、10 i = 1 while 1: # 循环条件为1必定成立 print i # 输出1~10 i += 1 if i > 10: # 当i大于10时跳出循环 break
作业
1.根据用户输入内容打印其权限 ''' jason --> 超级管理员 tom --> 普通管理员 jack,rain --> 业务主管 其他 --> 普通用户 ''' user_ns = ['jason',] user_ng = ['tom',] user_ny = ['jack', 'rain'] while 1: user = input("输入您的名字即可知道您的权限\n") if user in user_ns: print('超级管理员') elif user in user_ng: print('普通管理员') elif user in user_ny: print('业务主管') else: print("普通用户") 2.编写用户登录程序 要求:有用户黑名单 如果用户名在黑名单内 则拒绝登录 eg:black_user_list = ['jason','kevin','tony'] 如果用户名是黑名单以外的用户则允许登录(判断用户名和密码>>>:自定义) eg: oscar 123 black_user_list = ['jason', 'kevin', 'tony'] user_id = input("请输入用户名") if user_id in black_user_list: print("您在黑名单中") elif user_id == "oscar": password = input('输入密码') if password == '123': print("登陆成功") else: print("登录密码错误") else: print("登录名不正确") 3.编写用户登录程序 用户如果登录失败 则只能尝试三次 用户如果登录成功 则直接结束程序 black_user_list = ['jason', 'kevin', 'tony'] user_id = input("请输入用户名") dl = 1 while dl < 3: if user_id in black_user_list: print("您在黑名单中") dl += 1 user_id = input("请输入用户名") if dl == 3: print("您的次数已用完") elif user_id == "oscar": password = input('输入密码') if password == '123': print("登陆成功") break 4.猜年龄的游戏 假设用户的真实年龄是18 编写一个猜年龄的游戏 获取用户猜测的年龄 基本要求:可以无限制猜测 每次猜错给出提示(猜大了 猜小了) 猜对则结束程序 user_age = 18 dl = 1 while 1: user_cage = input("请输入您猜的年龄") user_cage = int(user_cage) if user_cage > user_age: print("猜大了") elif user_cage < user_age: print("猜小了") else: print("恭喜你猜对了") break 拔高练习:每次猜测只有三次机会 一旦用完则提示用户是否继续尝试 用户通过输入n或者y来表示是否继续尝试 如果是y则继续给用户三次猜测机会 否则结束程序 user_age = 18 dl = 0 while 1: user_cage = input("请输入您猜的年龄") user_cage = int(user_cage) if user_cage > user_age: print("猜大了") elif user_cage < user_age: print("猜小了") else: print("恭喜你猜对了") break dl += 1 if dl == 3: c = input("输入y表示继续给三次机会,n表示不想继续玩了:") if c == "y": dl = 0 elif c == "n": print("玩家选择游戏结束") else: print("请输入正确字母") break
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)