首页 > 其他分享 >垃圾回收机制及流程控制

垃圾回收机制及流程控制

时间:2022-09-27 18:22:23浏览次数:42  
标签:count ... 流程 回收 else 垃圾 time print 数据

1、昨日内容回顾

  • 布尔值(bool) 常见的布尔值为False的数据值、布尔值的变量的命名方式。

  • 元组(tuple) 不可变数据类型。

  • 集合(set) 用来做成员运算、空集合。

  • 计算机与用户交互 input()、print() 、python2和python3中输入输出的区别。

  • 格式化输出 常见占位符有'%s'、'%d',两者的特点。

  • 基本运算符 常用的数字运算符及比较运算符。

  • 多种赋值方式 链式赋值、交叉赋值、解压赋值。

  • 逻辑运算符 and、or、not

  • 成员运算符 in、not in。字符串、列表、字典进行成员运算的特点。

  • 身份运算符 id()方法、is 运算可查看两个变量或数据内存地址是否相同。

2、今日内容概要

  • 垃圾回收机制
  • 流程控制理论
  • 顺序结构
  • 分支结构
  • 循环结构

3、今日内容详细

垃圾回收机制

引用计数

同一个数据被变量名绑定的次数即为引用计数,当一个数据引用计数为0时,即被垃圾回收机制认定为垃圾数据,进行空间回收。

标记清除

标记清除机制主要解决循环引用产生的衍生数据问题,该衍生数据引用计数不为0,却无法被引用,为实质上的垃圾数据。当内存压力过大时,解释器会统一对所有数据进行扫描,标记出可以被直接或间接引用的数据,回收不能被引用到的数据所在的内存空间。

分代回收

程序运行中,垃圾回收机制持续运行会造成内存压力过大,影响程序主要功能运行。因此,垃圾回收机制会根据数据被引用的持续时间,将数据分为三代。

对于刚生成的一代数据,垃圾回收机制对其扫描的频率较高,在经历一定次数的扫描之后,若数据依然没有被回收,则将该部分数据归为第二代数据,降低对其的扫描频率;第二代数据在经历了一定次数的扫描之后,若依然没有被回收,则该数据被归为第三代数据,进一步降低对其的扫描频率。

流程控制理论

  • 顺序结构

在流程进行过程中,不涉及条件判断,从前往后顺序执行的结构为顺序结构。

  • 分支结构

在流程进行过程中,根据不同的条件,执行不同的后续程序,这种结构称为分支结构。

  • 循环结构

在流程进行过程中,在满足某一条件时,对一个程序进行多次重复,这种结构成为循环结构。

分支结构

单条件分支(if : ... else: ...语句)

最简单的分支结构,在满足某一条件时,执行对应子代码,不满足时,执行另一段子代码。不满足时,也可以不执行任何操作,即不写else及其对应子代码。

time_now = input('What is the time>>>:')
if time_now == 'midnight':
    print('It is time to sleep.')
else:  # 可不写
    print('We can still study')  # 可不写

多条件分支(if: ... elif: ... else: ...语句)

对一个数据的判断可能分为几个层级,在满足层级1时,执行层级1对应子代码;不满足层级1,但满足层级2时,执行层级2对应子代码......前边的层级都不满足时,执行最后一个层级对应子代码。

time_now = input('What is the time>>>:')
if time_now == 'morning':
    print('It is time to read.')
elif time_now == 'midnight':
    print('It is time to sleep.')
else:
    print('Just do whatever you like.')

分支的嵌套(if: ... if: ... else: ... else: ...语句)

对一个数据进行判断满足条件之后,需要对另一个或多个数据再次进行判断,使所有数据均满足条件从而到达唯一结果时,需要使用分支的嵌套,在满足所有条件时执行对应子代码,每层判断在不满足相应条件时,可执行另一段子代码。

time_now = input('What is the time>>>:')
weather = input('What is the weather now>>>:')
if time_now == 'morning':
    if weather == 'sunny':
        print('It is time to study.')
    else:
        print('It is better to sleep.')
else:
    print('It is too late.')

循环结构

while循环

当满足某一条件时,进行一段程序(循环体)的循环,可以使用while循环语句。

break语句可以强制结束当前循环,continue语句可以跳过本次循环,直接进行下一次循环。

count = 3
while count > 0:
    print('counting down: %s' % count)
    count -= 1
# 执行结果
counting down: 3
counting down: 2
counting down: 1
# --------------------------------------------
count = 3
while count > 0:
    if count == 2:
    	break
	else:
        print('counting down: %s' % count)
        count -= 1
# 执行结果
counting down: 3
# --------------------------------------------
count = 3
while count > 0:
    if count == 2:
        count -= 1
    	continue
	else:
        print('counting down: %s' % count)
        count -= 1
# 执行结果
counting down: 3
counting down: 1

while: ... else: ...语句

满足条件时,进行循环体代码,若循环体未强制结束,则循环正常结束时,执行else后的子代码。

标签:count,...,流程,回收,else,垃圾,time,print,数据
From: https://www.cnblogs.com/akazukis/p/16735512.html

相关文章

  • 流程控制
    今日内容回顾垃圾回收机制流程控制理论流程控制之分支结构(重要)流程控制之循环结构(重要)今日内容回顾详情垃圾回收机制1.引用计数引用计数是计算机编程语言中的一......
  • 软件测试的流程
    1.需求分析2.编写测试用例(测什么怎么测)3.评审测试用例4.搭建测试环境5.等待程序开发包6.部署测试包7.冒烟测试(测试主体功能是否有问题)8.执行测试用例9.bug跟踪处......
  • 内存回收、流程控制和循环
    垃圾回收机制"""有一些语言内存空间的申请和释放都需要程序员自己写代码才可以完成但是python却不需要通过垃圾回收机制自动管理"""1.引用计数name='jason'......
  • 垃圾回收机制GC
    垃圾回收机制GC我们已经知道,name='leethon'这一赋值变量的操作,是将变量与数据值相绑定。而数据值是存储到内存中的,有时变量会重新赋值即绑定其他数据值,而使得原本的数......
  • 通过Thread Pool Executor类解析线程池执行任务的核心流程
    摘要:ThreadPoolExecutor是Java线程池中最核心的类之一,它能够保证线程池按照正常的业务逻辑执行任务,并通过原子方式更新线程池每个阶段的状态。本文分享自华为云社区《【高......
  • C# 手动回收
    1、正常C#是继承GC,是无需手动回收释放,但是有时候确实遇到相关异常报错,手动释放是可以的finally{if(conn!=null&&conn.State!=Con......
  • Java流程控制05(switch多选择结构)
    多选择结构还有一个实现方式就是switchcase语句switchcase语句判断一个变量与一系列值中的某个值是否相等,每个值称为一个分支语法:switch(表达式){casevalue......
  • Java流程控制01(Scanner)
    用户交互Scanner:之前学习的基本语法中,我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入"Java.util.Scanner"是Java5的新特征,我......
  • MySQL 的一条语句的执行流程
    分为客户端,服务端,存储引擎三部分。mysql8.0后,取消缓存。1.myisam和innodb的区别。Mysql的InnoDB和MyISAM存储引擎的常见区别如下:锁支持:MyISAM只有表级锁(table-lev......
  • 流程控制练习
    流程控制练习打印三角形五行for(inti=1;i<=5;i++){  for(intj=5;j>=i;j--){    System.out.print("*"); }  for(intj=1;j......