垃圾回收机制及流程控制

1、昨日内容回顾

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

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

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

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

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

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

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

  • 逻辑运算符 and、or、not

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

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

2、今日内容概要

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

3、今日内容详细

垃圾回收机制

引用计数

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

标记清除

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

分代回收

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

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

流程控制理论

流程结构的分类

  • 顺序结构

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

  • 分支结构

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

  • 循环结构

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

流程控制基础知识

  • python中用代码的缩进量来表示彼此的从属关系,即缩进的代码(子代码)是否执行取决于上面未缩进的代码(父代码);
  • 一般子代码相对父代码的缩进量为四个空格(即一个'tab');
  • 拥有相同父代码的子代码拥有相同的缩进量;
  • 并不是所有代码都可以拥有子代码;
  • 如果一行代码需要编写子代码,行末尾需要加 ':' ;
  • 拥有相同缩进量的代码彼此互不影响,按照先后顺序执行。

分支结构

单条件分支(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 good to read.')
    else:
        print('It is better to sleep.')
else:
    print('It is not good to read.')

循环结构

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 = 3
while count > 0:
    print('counting down: %s' % count)
    count -= 1
else:
    print('countdown ends.')
# 执行结果
counting down: 3
counting down: 2
counting down: 1
countdown ends.
# --------------------------------------------
count = 3
while count > 0:
    if count == 2:
    	break
    else:
        print('counting down: %s' % count)
        count -= 1
else:
    print('countdown ends.')
# 执行结果
counting down: 3
posted @ 2022-09-27 18:19  Akazukis  阅读(173)  评论(0)    收藏  举报