首页 > 编程语言 >7、python入门篇 垃圾回收和流程控制

7、python入门篇 垃圾回收和流程控制

时间:2022-09-27 19:33:05浏览次数:38  
标签:python 代码 回收 入门篇 垃圾 print 执行 user

目录

今日内容总结

一、垃圾回收机制

垃圾回收机制,简称GC,是python解释器自带的机制,专门用来进行垃圾回收。

再定义一个变量时,会申请内存空间,当该变量使用完毕也应该释放掉该变量占用的内存空间,在其他解释器中需要程序员手动释放掉内存,而python则由GC机制进行回收。

无论何种垃圾回收机制,一般都分为两个阶段:垃圾检测和垃圾回收。垃圾检测就是区分内存中“可回收”和“不可回收”内存。垃圾回收则是使操作系统重新掌握垃圾检测阶段所标识出来的“可回收”内存块。

所有垃圾回收,并不是指直接把这块内存的数据值清空了,而是将使用权重新交给了操作系统,不会被应用程序霸占了

1、引用计数

​ 记录一个数据值被引用的次数,当该数据值的引用次数一旦为0,那么会被回收

a = 10  # 数据值10被引用,引用计数为:1
b = a   # 数据值10再次被引用,引用计数为:2
del b   # 数据值10引用次数被删除一次,引用计数为:1
当该数据值身上引用计数为0时,该数据会被垃圾回收机制进行回收;
当一个数据值身上的引用计数不为0时,该数据永远不会被垃圾回收机制回收

2、标记清除

​ 引用计数存在缺陷:循环引用
​ 当两个容器类型对象,内部分别将对方添加为元素,此时即便删除了变量名,这两个对象的引用计数容不能为0。

   l1 = []
   l2 = []
   l1.append(l2)
   l2.append(l1)
   del l1,l2   

​ 标记清除就是为了解决“循环引用”的问题。其过程为:

  1. 寻找根对象(root object)的集合,root object就是一些全局引用和函数栈的引用。
  2. 遍历root object集合,对每一个引用可以直接或间接访问到的对象标记为存活的对象,其余均为非存活对象,应该被清除。
  3. 遍历堆中的所有对象,对未被标记的对象全部清除掉。

3、分类代收

​ 在经历多次扫描的情况下,都没有被回收的对象,那么就认为,该变量是常用变量,对其的扫描频率会降低。具体的原理为:

分代指的是根据存活时间来为变量划分不同等级,也就是不同的代,垃圾回收的扫描频率会随着“代”的存活时间增大而减小。

“代”可以想象成链表,属于同一个代的对象都被连接在同一个链表中。在Python中总共存在三条链表,说明所有的对象可以分为三代:零代、一代、二代。一个“代”就是一条可收集对象链表。

第0代链表最多可容纳700个对象,一旦超过700这个阈值,那么会立即出发垃圾回收机制。

1代链表和2代链表触发垃圾回收的条件又是什么呢?当0代链表触发了10次垃圾回收的时候,会触发一次1代链表的垃圾回收。当1代链表触发了10次垃圾回收的时候,会触发一次2代链表的垃圾回收。

二、流程控制

1、理论

​ 流程控制即:控制事物的执行流程

​ 所有的程序,无论它的源码多么的庞大——即使是Windows操作系统,其程序也由三种基本结构组成:顺序结构分支结构循环结构

1、顺序结构

  • 顺序结构是最常见、最简单,也是最容易理解的一种最基本的程序结构。
    顾名思义,顺序结构就是程序从上到下依次执行的程序结构

2、分支结构

  • 分支结构(也称选择结构)也是很容易理解的。就像树的主干向分枝延伸一样。
    程序在同一时刻只选择执行其中一个分支。

3、循环结构

  • 有时候我们需要重复地执行某些相似的任务,可以用循环结构来表示。

2、必备知识

  • 1、python中使用代码的缩进来表示代码的从属关系;

    从属关系:缩进的代码(子代码)是否执行取决于父代码是否执行

  • 并不是所有的代码都可以拥有子代码:

    只有拥有if关键字和结尾带冒号(:)的代码,可以拥有子代码;

  • 如果多行子代码属于同一个父代码,那么这些子代码需要保证相同的缩进量;

  • 相同缩进量的子代码彼此之间平起平坐,按照顺序结构依次执行;

  • Pthon中对缩进量没有具体要求,推荐使用4个空格键(快捷键:tab键)。

3、分支结构

1、单if分支结构

```
if 条件 
   条件成立后执行的代码
```

user_name = input('请输入用户名:')  # 引导输入用户名
if user_name == 'kangkang'  # 设置条件
	print('好好学习')  # 当用户名满足条件时将执行打印代码

2、if...else...结构

```
if 条件 :
   条件成立后执行的代码
else :
    条件不成立后执行的代码
```

user_name = input('请输入用户名:')  # 引导输入用户名
if user_name == 'kangkang'  # 设置条件
	print('好好学习')  # 当用户名满足条件时将执行打印代码
else:
	print('请重新输入')  # 上列if条件不成立时,执行此代码

3、if...elif...eles...结构

```
if 条件1 :
   条件1成立后执行的代码
elif 条件2 :
   条件1不成立后执行的代码
elif 条件3 :
   条件1和2都不成立后执行的代码
else :
   上述条件都不成立后执行的代码
```

user_name = input('请输入用户名:')  # 引导输入用户名
if user_name == 'kangkang'  # 设置条件
	print('好好学习')  # 当用户名满足条件时将执行打印代码
elif user_name == 'xiaoli' :
	print('加油啊')  # 上列if条件不成立时,执行此代码
elif user_name == 'xiaozhang' :
	print('要努力哦')  # 上列if和elif条件不成立时,执行此代码
else :
	print('请重新输入')  # 上列条件都不成立时,执行此代码

4、if的嵌套使用

flower = '玫瑰'
colour = '红'
price = 500
is_fresh = True
is_girlfriend = True
user_name = 'xiaoli'
if user_name == 'xiaoli':
    print('花真好看')
    if is_girlfriend:
        print('买下来送给她吧')
        if flower == '玫瑰' and colour == '红' and price == 500 and is_fresh:
            print('买好了...回去送给她')
        else:
            print('再看看吧...')
    else:
        print('好可惜呀,没人送')
else:
    print('视而不见...')

4、循环结构

  • while 循环

    可以让一些代码反复的执行

while 条件:	
	条件成立之后执行的子代码(循环体代码)
    
 代码实现:   
user_name = 'kangkang'  # 设置用户名
while user_name == 'kangkang':  # 绑定条件
	print('好好学习')  # 循环输出...
    
* 先判断代码是否成立
* 如果成立则立即执行循环体代码
* 循环体代码执行完毕后再次回到条件判断处,判断条件是否成立
* 如果成立,则继续执行循环体代码
* 按照上述规律依次执行,直到条件不成立才会结束循环体代码的执行
  • break # 强制结束循环体

    可强制结束一段循环执行的代码

break  # 强行结束循环体
	while循环体代码一旦执行到break会直接结束循环
    
代码实现:
user_name = 'kangkang'  # 设置用户名
while user_name == 'kangkang':  # 绑定条件
	print('好好学习')  # 循环输出...  
    break  # 结束循环
  • continue # 直接跳到循环判断处

    可以让一串循环执行的代码跳到代码判断处,重新判断

continue  # 直接跳到条件判断处
	while循环体代码一旦执行到continue会结束本次循环 开始下一次循环

代码实现:
number = 1  # 设置判断数据值
while number:  # 设置循环条件
    print('好好学习')  # 循环打印
    continue  # 循环系统遇到此代码,将回到代码判断处,重新进行判断
    break  # 添加此代码是为了凸显continue代码的作用
  • while...else...
while 条件:
    循环体代码
else:
    循环体代码没有被强制结束的情况下 执行完毕就会执行else子代码
    
代码实现:  
number = 1  # 设置循环数据值
while number <= 10 :  # 设置循环条件
    number += 1
    print('好好学习')  # 打印
    continue  # 
else:  # 以上代码没有被强制结束,将按顺序向下执行
    print('天天向上')  # 打印此代码

标签:python,代码,回收,入门篇,垃圾,print,执行,user
From: https://www.cnblogs.com/kangssssh/p/16735692.html

相关文章

  • python之流程控制-分支结构、循环结构
    流程控制编写程序,是将自己的逻辑思想记录下来,使得计算机能够执行的过程。而流程控制,则是逻辑结构中十分重要的一环。在程序中,基础的流程结构分为顺序结构、分支结构、顺......
  • 垃圾回收机制和流程控制理论
    垃圾回收机制和流程控制理论今日内容概要垃圾回收机制流程控制理论(重要)流程控制之分支结构(重要)流程控制之循环结构(重要)今日内容详细垃圾回收机制"""有一些语言......
  • 关于python的opencv库的学习笔记,腐蚀与膨胀
    importcv2importnumpyasnp##img=cv2.imread('cat.jpeg')##cv2.imshow('cat',img)##cv2.waitKey()##cv2.destroyAllWindows()##对图像进行腐蚀操作#ken=np.ones......
  • python 读取excel
    #!/usr/bin/envpython#-*-coding:utf-8-*-importwarningswarnings.filterwarnings('ignore')importopenpyxlfromopenpyxl.cellimportMergedCellimporto......
  • 垃圾回收机制、流程控制、分支结构、循环结构
    垃圾回收机制"""有一些语言内存空间的申请和释放都需要程序员自己写代码才可以完成但是python却不需要通过垃圾回收机制自动管理"""1.引用计数name='jason' ......
  • 垃圾回收机制 流程控制
    垃圾回收在程序执行过程中,变量绑定和引用以积极各种内存操作,使用过后不在使用,如果不清理就会产生垃圾数据,占用大量内存,导致计算机不能正常运行,有一些语言内存空间的申请......
  • 垃圾回收机制及流程控制
    1、昨日内容回顾布尔值(bool)常见的布尔值为False的数据值、布尔值的变量的命名方式。元组(tuple)不可变数据类型。集合(set)用来做成员运算、空集合。计算机......
  • 11 | python脚本更改linux系统下的文件权限
    在文件上传至linux系统的过程中遇到了执行文件不可执行的问题。于是自己写了一个python脚本和文件夹放到一起,上传后运行即可!frompathlibimport*#目录文件名......
  • Python学习:绑定方法与非绑定方法
    一、绑定方法与非绑定方法类中定义的函数分为两大类:绑定方法和非绑定方法其中绑定方法又分为绑定到对象的对象方法和绑定到类的类方法。在类中正常定义的函数默认是绑定......
  • python接口测试1-简单的接口测试
    使用requests包配置请求的url、headers、如果是post,put方法,还需要有请求的body注意空值,在python中应写为None  ......