目录
一、垃圾回收机制
在其他的编程语言中,释放和申请内存空间都需要程序员自己写代码申请;但是python可以通过自动回收机制来进行自动管理,让我们一起来看看python中的垃圾回收机制是如何运行的吧QvQ
想要弄清楚垃圾回收机制,首先我们应该来了解引用计数
1.引用计数reference count
定义:引用计数是计算机编程语言中的一种内存管理技术,是指将资源(可以是对象、内存或磁盘空间等等)的被引用次数保存起来,当被引用次数变为零时就将其释放的过程。使用引用计数技术可以实现自动资源管理的目的。同时引用计数还可以指使用引用计数技术回收未使用资源的垃圾回收算法。
#简单来说,一个数据被引用时,其引用计数则会+1,而当其引用次数变为0时,将会把这个数据值当作垃圾删除掉。
#也就是说,引用计数代表了一个数据值被需要的程度,当不被需要时,该数据则自动变成"垃圾"被清理掉了
1)举例
name = 'jason' 数据值jason身上的引用计数为1
name1 = name 数据值jason身上的引用计数加一 为2
del name1 数据值jason身上的引用计数减一 为1
#当数据值身上的引用计数 为0 的时候,就会被垃圾回收机制当做垃圾回收掉
#当数据值身上的引用计数 不为0 的时候,永远不会被垃圾回收机制回收
2.引用计数的缺点
1)频繁更新引用计数会降低运行效率
2)原始的引用计数无法解决 循环引用问题
3.标记清除 ==>解决循环引用占用内存
#举例
l1 = [11, 22] # 引用计数为1
l2 = [33, 44] # 引用计数为1
l1.append(l2) # l1 = [11, 22, l2列表] 引用计数为2
l2.append(l1) # l2 = [33, 44, l1列表] 引用计数为2
del l1 # 断开变量名l1与列表的绑定关系 引用计数为1
del l2 # 断开变量名l2与列表的绑定关系 引用计数为1
当内存占用达到临界值的时候 程序会自动停止 然后扫描程序中所有的数据
并给只产生循环引用的数据打上标记 之后一次性清除
4.分代回收 ==>频繁更新引用计数会降低运行效率损,耗各项资源
# 好像娱乐圈的粉丝数量
被引用的次数 非常非常多 ==> 正当红艺人
被引用的次数 还可以 ==> 半当红艺人
被引用的次数 很少 ==> 过气艺人
当引用计数=0 时,该艺人将被娱乐圈踢出去,不再成为 艺人
# 即垃圾回收机制也将更多的时间聚焦于引用计数更少的老年代数据
二、流程控制
1. 流程控制理论
0.流程控制的概念
控制事物的执行流程
1.顺序结构 # 从上往下依次执行
顺序结构就是让程序按照从头到尾的顺序依次执行每一条 Python 代码,不重复执行任何代码,也不跳过任何代码。
2.分支结构(选择结构) # 事物的执行,根据不同的条件,做不同的执行
选择结构也称分支结构,就是让程序“拐弯”,有选择性的执行代码;换句话说,可以跳过没用的代码,只执行有用的代码。
3.循环结构 # 根据某个条件重复执行
循环结构就是让程序“杀个回马枪”,不断地重复执行同一段代码。
2.流程控制的必备python知识
1.python中 '代码缩进' =>>>表示了代码的'从属关系'
从属关系:缩进的代码(子代码)是否执行取决于上面没有缩进的代码(父代码)
2.并非所有代码都可以有 '子代码'
有子代码的关键字: if elif else while等
3.如果有多行字代码属于同一个父代码,那么这些子代码需要保证相同的缩进量
4.python中针对缩进量没有具体的要求,但是推荐使用四个空格(windows中tab键)
5.当某一行代码需要编写子代码的时候 那么这一行代码的结尾肯定有冒号
6.相同缩进量的代码 ,按照顺序结构依次执行
3.流程控制之分支结构(if else 语句)
if else 语句可以细分为三种形式,分别是 if 语句、if else 语句和 if elif else 语句
(1)单if分支结构
1.语法
if 条件:
条件成立之后才会执行的代码快
ps:单if可以借助于流程图理解
2.举例
username = input('age:')
if age >= 18:
print('可以登陆游戏')
(2)if...else...分支结构
1.语法
if 条件:
条件成立之后执行的子代码
else:
条件不成立执行的子代码
2.举例
username = input('age:')
if username >= 18:
print('可以登陆游戏')
else:
print('未成年人禁止登陆')
(3)if...elif...else分支结构
1.语法
if 条件1:
条件1成立之后执行的子代码
elif 条件2:
条件1不成立 条件2成立执行的子代码
elif 条件3:
条件1和2都不成立 条件3成立执行的子代码
else:
上述条件都不成立 执行的子代码
ps:中间的elif可以写多个、上述子代码永远只会走一个 # 不管有多少个分支,都只能执行一个分支,或者一个也不执行,不能同时执行多个分支。
2.举例
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的嵌套使用
if、if else 和 if elif else,这 3 种条件语句之间可以相互嵌套
# 举例
proof = int(input("输入驾驶员每 100ml 血液酒精的含量:"))
if proof < 20:
print("驾驶员不构成酒驾")
else:
if proof < 80:
print("驾驶员已构成酒驾")
else:
print("驾驶员已构成醉驾")
4.循环结构
while 循环和 if 条件分支语句类似,即在条件(表达式)为真的情况下,会执行相应的代码块。不同之处在于,只要条件为真,while 就会一直重复执行那段代码块
1.while条件:条件成立之后执行的子代码(循环体代码)
1)判断条件是否成立
2)成立=>>执行循环代码体
3)循环代码体执行完毕=>>再次回到条件判断处,判断条件是否成立
4)成立=>>执行循环代码体
5)直到条件不成立=>>结束执行
2.while条件中的关键字
1)break # 强行结束循环体
while循环体代码一旦执行到 break 会直接结束循环
2)continue # 直接跳到条件判断处
while循环体代码一旦执行到 continue 会结束本次循环 开始下一次循环
# while else:
while 条件:
循环体代码
else:
循环体代码没有被强制结束的情况下 执行完毕就会执行else子代码
标签:Python,代码,回收,else,计数,引用,条件,执行,垃圾
From: https://www.cnblogs.com/DuoDuosg/p/16735947.html