首页 > 其他分享 >流程控制

流程控制

时间:2022-09-27 17:58:14浏览次数:43  
标签:控制 循环体 流程 回收 计数 引用 print 代码

今日内容回顾

  • 垃圾回收机制
  • 流程控制理论
  • 流程控制之分支结构(重要)
  • 流程控制之循环结构(重要)

今日内容回顾详情

垃圾回收机制

1.引用计数

引用计数是计算机编程语言中的一种内存管理技术,是指将资源(可以是对象、内存或磁盘空间等等)的被引用次数保存起来,当被引用次数变为零时就将其释放的过程。使用引用计数技术可以实现自动资源管理的目的。同时引用计数还可以指使用引用计数技术回收未使用资源的垃圾回收算法。

name = 'james'#数据值James身上的引用计数为1
name1 = name  #数据值james身上的引用计数+1  为2
del name1     #数据值james身上的引用计数-1  为1

当数据值身上的引用计数为0的时候 就会被垃圾回收机制当做垃圾回收掉
当数据值身上的引用计数不为0的时候 永远不会被垃圾回收机制回收

2.标记清除

python采用"标记-清除"算法来解决容器对象可能产生的循环引用问题。这里要注意,只有容器对象才会产生循环引用的情况,比如列表、字典、用户自定义对象等)。像数字、字符串这类简单类型不会出现循环引用。作为一种优化策略,对于只包含简单类型的元组也不在标记清除算法的考虑之列。
该算法在进行垃圾回收时拢共分两步。
步骤1:标记阶段。该阶段会遍历所有的对象,如果是可达的,即还有对象引用它,那么就标记该对象为可达。
步骤2:清除阶段。再次遍历对象,如果发现某个对象没有标记可达,则将其回收。

主要针对循环引用问题
    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

当内存占用达到临界值的时候 程序会自动停止 然后扫描程序中所有的数据并给只产生循环引用的数据打上标记 之后一次性清除
如图所示:
image

3.分代回收
垃圾回收机制的频繁运行也会损耗各项资源
新生代、青春代、老年代(越往下检测频率越低)
分代回收是一种以空间换时间的操作方式,Python将内存根据对象的存活时间划分为不同的集合,每个集合称为一个代,Python将内存分为了3“代”,分别为年轻代(第0代)、中年代(第1代)、老年代(第2代),他们对应的是3个链表,它们的垃圾收集频率随着对象存活时间的增大而减小。
新创建的对象都会分配在年轻代,年轻代链表的总数达到上限时,Python垃圾收集机制就会被触发,把那些可以被回收的对象回收掉,而那些不会回收的对象就会被移到中年代去,依此类推,老年代中的对象是存活时间最久的对象,甚至是存活于整个系统的生命周期内。
同时,分代回收是建立在标记清除技术基础之上。分代回收同样作为Python的辅助垃圾收集技术处理那些容器对象

流程控制理论

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

事物执行流程总共可以分为三种

1.顺序结构
从上往下依次执行 我们之前所编写的代码都属于该结构
2.分支结构
事物的执行会根据条件的不同做出不同的执行策略
3.循环结构
事物的执行会根据某个条件出现重复
ps:很多时候可能会出现三者混合

流程控制必备知识

1.python中使用代码的缩进来表示代码的从属关系
从属关系:缩进的代码(子代码)是否执行取决于上面没有缩进的
2.并不是所有的代码都可以拥有子代码
if关键字
3.如果有多行子代码属于同一个父代码 那么这些子代码需要保证相同的缩进量
4.python中针对缩进量没有具体的要求 但是推荐使用四个空格(windows中tab键)
5.当某一行代码需要编写子代码的时候 那么这一行代码的结尾肯定需要冒号
6.相同缩进量的代码彼此之间平起平坐 按照顺序结构依次执行

分支结构

1.单if分支结构
if 条件:
条件成立之后才会执行的代码快

代码实现:
username = input('username>>>:')
if username == 'jason':
     print('老师好')

2.if...else...分支结构
if 条件:
条件成立之后执行的子代码

else:
条件不成立执行的子代码

代码实现:
username = input('username>>>:')
if username == 'jason':
    print('老师好')
else:
    print('没事了')

image

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

代码实现:
score = input('请输入学生成绩>>>:')
score = int(score)  # 将字符串的整数转换成整型的整数
if score >= 90:
    print('优秀')
elif score >= 80:
    print('良好')
elif score >= 70:
    print('一般')
elif score >= 60:
    print('及格')
else:
    print('挂科')

流程图如图所示:
image

4.if的嵌套使用(有点难)

代码实现:
age = 28
height = 170
weight = 110
is_beautiful = True
is_success = False
username = 'tony'
if username == 'tony':
    print('tony发现目标')
    if age < 30 and height > 160 and weight < 150 and is_beautiful:
        print('加微信')
        if is_success:
            print('开心')
        else:
            print('告辞')
    else:
        print('不好意思 认错人了')
else:
    print('不是tony')

流程图如下:
image

循环结构

循环就是想让一些代码反复执行

while 条件:
条件成立之后执行的子代码(循环体代码)
1.先判断条件是否成立
2.如果成立则执行循环体代码
3.循环体代码执行完毕后再次回到条件判断处 判断条件是否成立
4.如果成立 则继续执行循环体代码
5.按照上述规律依次执行 直到条件不成立才会结束循环体代码的执行

 count = 1
while count < 5:
print('hello world')
count += 1  # count = count + 1
print('想不想干饭?')

流程图:
image

break (强行结束循环体)
while循环体代码一旦执行到break会直接结束循环
continue (直接跳到条件判断处)
while循环体代码一旦执行到continue会结束本次循环 开始下一次循环
while 条件:
循环体代码
else:
循环体代码没有被强制结束的情况下 执行完毕就会执行else子代码

标签:控制,循环体,流程,回收,计数,引用,print,代码
From: https://www.cnblogs.com/zjl248/p/16735389.html

相关文章

  • 软件测试的流程
    1.需求分析2.编写测试用例(测什么怎么测)3.评审测试用例4.搭建测试环境5.等待程序开发包6.部署测试包7.冒烟测试(测试主体功能是否有问题)8.执行测试用例9.bug跟踪处......
  • 内存回收、流程控制和循环
    垃圾回收机制"""有一些语言内存空间的申请和释放都需要程序员自己写代码才可以完成但是python却不需要通过垃圾回收机制自动管理"""1.引用计数name='jason'......
  • Hiwin直线电机C#MPI控制程序<通讯设置、回原点设置、点动模式、点对点运动、依托Timer
    一、通讯设定与连接√说明与总结:布尔量Connect为驱动器连接与否的标识符,启动时默认为false,即未连接状态; /*-----------------------------------------------*/......
  • 通过Thread Pool Executor类解析线程池执行任务的核心流程
    摘要:ThreadPoolExecutor是Java线程池中最核心的类之一,它能够保证线程池按照正常的业务逻辑执行任务,并通过原子方式更新线程池每个阶段的状态。本文分享自华为云社区《【高......
  • IDEA控制台输出中文为乱码解决方法
    IDEA控制台输出中文为乱码解决方法 当前环境:IntelliJIDEA2021.3heJDK18 01)在IDEA设置中修改编码设置  02)修改IDEA安装文件idea64.exe.vmoptions修改-......
  • 模糊控制
    具有固定规则的情况下 只需算好A、B的隶属度,然后求A∩B,得到每个规则所属隶属度,然后对应每个规则选择最高隶属度,进行反模糊 如上图,求A∩B后得到各规则隶属度(3/5,2/5......
  • 跳转控制语句continue
    用于结束本次循环,继续执行下一个循环碰到continue后直接执行循环条件,不再执行后续的内容注意区分break和continue的区别continue只能配合循环使用,break可以和switch或是......
  • 跳转控制语句break
    执行某些循环时,当满足了某个条件,使其提早退出循环,便可以使用break跳出循环流程图如下:  其他循环均可以以此类推例子: ......
  • FISCO BCOS 控制台 部署合约 调用 查看已部署合约的地址
    deploy部署合约。(默认提供HelloWorld合约和TableTest.sol进行示例使用)参数:合约路径:合约文件的路径,支持相对路径、绝对路径和默认路径三种方式。用户输入为文件名时,从......
  • Java流程控制05(switch多选择结构)
    多选择结构还有一个实现方式就是switchcase语句switchcase语句判断一个变量与一系列值中的某个值是否相等,每个值称为一个分支语法:switch(表达式){casevalue......