今日内容目录

垃圾回收机制

流程控制理论&

流程控制之分支结构&

流程控制之循环结果&

详情

Python垃圾回收机制

"""
有一些语言,内存空间的申请和释放都需要程序员写入代码。但是python却不需要,它通过垃圾回收机制自动管理。
Python 的GC模块主要运用了引用计数来跟踪和回收垃圾;通过“标记-清除”解决容器对象可能产生的循环引用问题;通过分代回收以空间换时间进一步提高垃圾回收的效率。
也即采用“引用计数“为主(实时性,一旦没有引用,内存就直接释放了),“标记-清除”与“分代收集”两种机制为辅的策略。
"""
  • 引用计数

    • ​ 为每一个对象维护一个引用计数器,当一个对象的引用被创建或者复制时,(对象的引用)计数器+1,当一个对象的引用被销毁时,计数器的值-1,当计数器的值为0时,就意味着对象已经再没有被使用了,可以将其内存释放掉。
     name = 'boy'  数据值
    # boy身上的引用技术为1
    name1 = name 数据值boy
    # 身上的引用技术加一 1+1=2(为2)
    de1 name1 数据值
    # boy身上的引用技术减一 2-1=1(为1)
    • 当数据值身上的引用计数不为0的时候 永远不会被垃圾回收机制回收
  • 标记清除

    主要针对循环引用问题
    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
    • ​ 当内存占用达到临界值的时候 程序会自动停止 然后扫描程序中所有的数据

      并给只产生循环引用的数据打上标记 之后一次性清除
  • 分代回收

    • 垃圾回收机制的频繁运行也会损耗各项资源
    • 新生代、青春代、老年代(越往下检测频率越低)

流程控制理论

  • 什么是流程控制理论

       程序中的语句默认自上而下顺序执行。流程控制指的是在程序执行时,通过一些特定的指令更改程序中语句的执行顺序,使程序产生跳跃、回溯等现象。
    • 顺序结构

      从上往下依次执行 我们之前所编写的代码都属于该结构

    • 分支结构

      ​ 分支结构与顺序结构有所不同,它需要根据某些特定的条件来做出判断,再执行不同的流程这么一套流程。

    • 循环结构

      ​ 跟分支结构类似但是,它是需要对于根据的某些特定条件判断是否执行循环反复的做一件相同的事情,这个循环不可能一致持续,应该需要一个使循环结束的挑几件。

    ps:在代码的世界里 很多时候可能会出现三者混合

流程控制必备知识

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

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

分支结构

  • 单if分支结构
    if 条件:
    条件成立之后才会执行的代码快
    ps:单if可以借助于流程图理解
    username = input('username>>>:')
    if username == 'ZGL':
    print('大家好')

  • if...else...分支结构
    if 条件:
    条件成立之后执行的子代码
    else:
    条件不成立执行的子代码
    username = input('username>>>:')
    if username == 'ZGL':
    print('大家好')
    else:
    print('好好学习')

  • if...elif...else分支结构
    if 条件1:
    条件1成立之后执行的子代码
    elif 条件2:
    条件1不成立 条件2成立执行的子代码
    elif 条件3:
    条件1和2都不成立 条件3成立执行的子代码
    else:
    上述条件都不成立 执行的子代码
    ps:中间的elif可以写多个、上述子代码永远只会走一个
    score = input('请输入学生成绩>>>:')
    score = int(score) # 将字符串的整数转换成整型的整数
    if score >= 90:
    print('优秀')
    elif score >= 80:
    print('良好')
    elif score >= 70:
    print('一般')
    elif score >= 60:
    print('及格')
    else:
    print('挂科 交钱重修')

  • 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做不出来这件事')

循环结构

while 条件表达式
while循环是一个条件循环语句,当条件满足时重复执行代码块,直到条件不满足为止。
  • 先判断条件是否成立
  • 如果成立则执行循环体代码
  • 循环体代码执行完毕后再次回到条件判断处 判断条件是否成立
  • 如果成立 则继续执行循环体代码
  • 按照上述规律依次执行 直到条件不成立才会结束循环体代码的执行
# count = 1
# while count < 5:
# print('hello world')
# count += 1 # count = count + 1
# print('想不想干饭?')

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

作业

1.根据用户输入内容打印其权限
'''
jason --> 超级管理员
tom --> 普通管理员
jack,rain --> 业务主管
其他 --> 普通用户
'''
# 1.获取用户输入的用户名
username = input('请输入您的用户名>>>:')
# 2.判断用户名 打印不同的提示>>>:不同的条件执行不同的代码 那么需要使用分支结构
if username == 'jason':
print('超级管理员')
elif username == 'tom':
print('普通管理员')
# elif username == 'jack' or 'rain': # 错误写法
# elif username == 'jack' or username == 'rain': # 正确写法
elif username in ['jack', 'rain']: # 正确写法
print('业务主管')
else:
print('普通用户') 2.编写用户登录程序
要求:有用户黑名单 如果用户名在黑名单内 则拒绝登录
eg:black_user_list = ['jason','kevin','tony']
如果用户名是黑名单以外的用户则允许登录(判断用户名和密码>>>:自定义)
eg: oscar 123
3.编写用户登录程序
用户如果登录失败 则只能尝试三次
用户如果登录成功 则直接结束程序
# 4.定义一个计数器
count_num = 1
while True:
# 6.先判断当前尝试了几次
if count_num == 4:
print('很抱歉 您已经尝试了三次')
break
# 1.获取用户数据
username = input('username>>>:')
password = input('password>>>:')
# 2.校验数据是否正确
if username == 'jason' and password == '123':
print('登录成功')
break # 3.结束循环体代码
else:
print('用户名或密码错误')
# 5.每错误一次就让计数器自增1
count_num += 1 4.猜年龄的游戏
假设用户的真实年龄是18 编写一个猜年龄的游戏 获取用户猜测的年龄
基本要求:可以无限制猜测 每次猜错给出提示(猜大了 猜小了) 猜对则结束程序
拔高练习:每次猜测只有三次机会 一旦用完则提示用户是否继续尝试 用户通过输入n或者y来表示是否继续尝试 如果是y则继续给用户三次猜测机会 否则结束程序
# 1.先定义用户的真实年龄
real_age = 18
# 8.定义计数器
count_num = 1
# 6.添加循环结构
while True:
# 10.判断当前尝试的次数
if count_num == 4:
choice = input('您已经尝试了三次 是否继续尝试(n/y)>>>:')
# 11.判断用户输入的选择
if choice == 'y':
# 12.重置计数器
count_num = 1
else:
print('下次再来玩哟')
break
# 2.获取用户猜测的年龄
guess_age = input('你猜一猜我的年龄 好不好呀>>>:')
# 3.由于一会儿需要比较大小 所以要将用户输入的字符串年龄转成整型的年龄
guess_age = int(guess_age) # 有小bug 暂时不考虑
# 4.判断年龄是否猜测正确
if guess_age > real_age:
print('你这小伙子 真讨厌 人家有那么大吗')
# 猜测错了 计时器加一
count_num += 1
elif guess_age < real_age:
print('哎呀 你真讨厌 人家也没那么小啦')
# 猜测错了 计时器加一
count_num += 1
else:
print('你真棒 猜对了 嘿嘿嘿')
# 7.猜对了 直接结束循环
break
"""
1.先写注释(思维逻辑和想法)
2.先考虑主题功能 再考虑附加功能
"""

python锦鲤的更多相关文章

  1. Python中的多进程与多线程(一)

    一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...

  2. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  3. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  4. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  5. 可爱的豆子——使用Beans思想让Python代码更易维护

    title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...

  6. 使用Python保存屏幕截图(不使用PIL)

    起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...

  7. Python编码记录

    字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...

  8. Apache执行Python脚本

    由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...

  9. python开发编译器

    引言 最近刚刚用python写完了一个解析protobuf文件的简单编译器,深感ply实现词法分析和语法分析的简洁方便.乘着余热未过,头脑清醒,记下一点总结和心得,方便各位pythoner参考使用. ...

随机推荐

  1. python迭代器、生成器、yield理解

    简介 yield关键字是python的一种高阶用法,使用yield的函数会返回一个生成器对象,生成器又是一个迭代器,与迭代器相类似的则是可迭代对象,下面首先介绍一下迭代器吧. 迭代器 在python中 ...

  2. python 操作json数据

    简介 JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式,通常是以键值对的方式呈现,其简洁和清晰的层次结构使得JSON成为理想的数据交换语言,而 ...

  3. python os相关操作

    python os模块常用操作 什么时候使用os模块? 操作文件及文件夹(对于文件及文件夹的增删改查) 1.获取当前文件夹的工作目录 注意不是当前文件所在文件,即当前执行python文件的文件夹 pr ...

  4. python代码是如何执行的?

    ​ 解释运行程序 回忆上次内容 py 文件的程序是按照顺序 一行行挨排解释执行的 我们可以 python3 -m pdb hello.py 来对程序调试 调试的目的是去除 bug 别害怕 bug bu ...

  5. 膜 社论(egg drop)

    题面 \(n\) 楼 \(m\) 个鸡蛋,从 \(k\) 楼及以上扔下去会碎,不能再测试 . 问至少需要扔几次确定 \(k\) . \(n\le 10^{18}\),\(m\le 64\) . 题解 ...

  6. Lua 语言

    # Lua是一种轻量.小巧的脚本语言,用标准C语言编写并以源码形式开发.设计的摸底是为了嵌入到其他应用程序中,从而为应用程序提供灵活的拓展和定制功能. # Lua安装 # 官网:https://www ...

  7. react实战系列 —— react 的第一个组件

    react 的第一个组件 写了 react 有一个半月,现在又有半个月没写了,感觉对其仍旧比较陌生. 本文分两部分,首先聊一下 react 的相关概念,然后不使用任何语法糖(包括 jsx)或可能隐藏底 ...

  8. Vmware 虚拟机连接外网和设置固定IP

    NAT 模式(地址转换模式) 在NAT模式中,主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,虚拟机借助NAT功能,通过宿主机器所在的网络来 ...

  9. FormData 和表单元素(form)的区别

    Form 元素 <form>元素表示文档中的一个区域,此区域包含交互控件,用于向 Web 服务器提交信息(文件.字符).下面称之为表单元素或表单. 要向 Web 服务器提交信息,我们必须要 ...

  10. Python自学教程7:字典类型有什么用

    字典是Python中的一个重要操作,如果字典玩得顺,很多其他的数据类型就可以一通百通. Python字典的定义 字典使用一对大括号进行定义,键值对之间使用逗号隔开,键和值使用冒号分隔. 键必须是不可变 ...