小白学python系列————【Day15】垃圾回收机制及字符编码简史
今日内容概要
- 垃圾回收机制(理论)
- 字符编码概述(理论)
- 字符编码相关操作
- 代码操作文件
垃圾回收机制
python会自动帮你申请和释放内存空间
1.引用计数
概念:
当数据值身上的引用计数不为0即变量绑定值为零时,表示该数据值还有用,不会被删除。
当数据值身上的引用计数为0则会被垃圾回收机制回收。
代码展示:
name = 'jason' # 数据值jason身上的引用计数就是1 name1 = name # 数据值jason身上的引用计数就是2 del name1 # 数据值jason身上的引用计数变为1
画图解释:
缺陷:
容易被循环引用
2.标记清除
概念:
用于解决循环引用问题,将内存中陈序产生的所有数据值全部检查一遍,对于存在循环引用的数据值做标记,最后统一清除。
代码展示:
l1 = ['jason', ] l2 = ['kevin', ] l1.append(l2) # 引用计数为2 l2.append(l1) # 引用计数为2 del l1 # 解除变量名l1与列表的绑定关系 列表引用计数减一 del l2 # 解除变量名l1与列表的绑定关系 列表引用计数减一
画图解释:
缺陷:
标记清除每隔一段时间就需要将所有有数据重新排查一遍,资源消耗过大
3.分代回收
概念:
为减轻垃圾回收机制的资源损耗,开发出三代管理:
初生代————青春代————老年代
画图解释
越往下检测的频率越低,节省资源损耗!!!
字符编码概述
1.字符编码简介
字符编码(英语:Character encoding)也称字集码,是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。常见的例子包括将拉丁字母表编码成摩斯电码和ASCII。其中,ASCII将字母、数字和其它符号编号,并用7比特的二进制来表示这个整数。通常会额外使用一个扩充的比特,以便于以1个字节的方式存储。
2.字符编码发展史
2.1.
最开始为美国人发明的ASCII码,内部只记录了英文字符与数字的对应关系.
存储字符:1bytes
2.2.
而后又有一些国家发明了适用于自己国家语言的编码表。
中国的GBK码:内部记录了中文字符、英文字符与数字的对应关系
2bytes起步存储中文(遇到生僻字使用更多字节)
1bytes存储英文
韩国的Euc_kr码:内部记录了韩文字符、英文字符与数字的对应关系
日本的shift_JIS码:内部记录了日文字符、英文字符与数字的对应关系
这也导致了各国计算机文本文件无法直接交互,出现乱码的情况!!!
2.3.
为了解决乱码问题,先后出现了适用于各个语言的编码表
万国码(unicode):兼容万国字符
所有的字符全部使用2bytes起步存储
utf家族(针对unicode的优化版本)>>>:utf8
英文还是采用1bytes
其他统一采用3bytes
字符编码相关操作
1.编码与解码
1.1:为什么要进行编码与解码?
举个例子,这里我们不妨将人类可以很容易理解的字符作为“明文”,将人类的明文加密成不易懂但是更易于存储和传输的消息字节作为“密文”。那么编码和解码的关系如下: 明文就是人类可以直接一眼就看得懂的字符,密文就是明。文被加密后一般人无法立马看懂的字节。
1.2:编码:
所以人类看的懂的字体符号简称字符,要想让机器看的懂并且按照我们的命令去执行,那就得先编码成机器看的懂的话,也就是编译成字节码,把字符编译成字节的过程叫做编码。
1.3 :解码:
机器看的懂的话,或者机器按人类的命令操作返回了一些结果,人类看不懂啊,也得进行一次解码,解码成人类看的明白的字体符号(字符),把字节转为人类看的懂的现实生活里面的字符过程就是解码。
名称 | 方式 | 作用 |
---|---|---|
编码 | encode | 将人类能够读懂的字符编码成计算机能够直接读懂的字符 |
解码 | decode | 将计算机能够直接读懂的字符解码成人类能够读懂的字符 |
1.4:代码展示
># 编码 encode
s1 = '编码的实操' print(s1.encode('gbk')) """字符串前面如果加了字母b 表示该数据类型为 bytes类型bytes类型可以看成是二进制 """D:\Python36\python36.exe "E:/pythonProject/Day09/01 6.28预习.py" b'\xb1\xe0\xc2\xeb\xb5\xc4\xca\xb5\xb2\xd9'Process finished with exit code 0
# 解码 decode
res =b'\xb1\xe0\xc2\xeb\xb5\xc4\xca\xb5\xb2\xd9' print(res.decode('gbk')) """ 基于网络传输数据 数据都必须是二进制格式所以肯定涉及到编码与解码 """D:\Python36\python36.exe "E:/pythonProject/Day09/01 6.28预习.py" 编码的实操Process finished with exit code 0
2.解决乱码问题
如何处理乱码的情况?
出现乱码的原因主要是因为在进行编码和解码的过程中使用的编码表不同导致的
所以编码过程中要注意编码表的正确使用!!!
3.python解释器层面
因为现阶段python解释器开发时间不同,所以导致对于编码问题的处理就有了不同的方法。(这也与编码表的发展有关)
版本 | 方法 |
---|---|
python2.x | 默认的编码是ASCII码1.必须在文件的开头告诉解释器使用指定的编码2.在使用python2解释器的环境下定义字符串习惯在前面加u |
python3.x | 解释器默认的编码是utf-8 |
文件操作简介
1.什么是文件?
文件就是把一些数据存起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。
文件其实是操作系统暴露给用户操作计算机硬盘的快捷方式之一!!!
2.如何操作文件?
2.2:打开文件、创建文件
# open(文件路径,读写模式,字符编码) W = open(‘a.txt’,’w’) #没有找到‘a.txt’文件,所以新建了‘a.txt’文件
2.3关闭文件
方式一:f = open(“a.txt”,”w”) f.colse()#关闭这个文件
方式二:
上述操作open完最后都需要执行close 而close这一行很任意被遗忘# with上下文管理(推荐使用)with open(r'a.txt', 'r', encoding='utf8') as f: # f = open()data = f.read()print(data)
作业提交
作业一:
1.统计列表中每个数据值出现的次数并组织成字典战士
eg: l1 = [‘jason’,‘jason’,‘kevin’,‘oscar’]
结果:{‘jason’:2,‘kevin’:1,‘oscar’:1}
真实数据
l1 = [‘jason’,‘jason’,‘kevin’,‘oscar’,‘kevin’,‘tony’,‘kevin’]
# 作业一:
l1 = ['jason','jason','kevin','oscar','kevin','tony','kevin']
dict = {} # 定义一个空字典
for i in l1: # 循环取l1列表值num1 = l1.count(i) # 利用.count关键字对列表内个数据值进行统计dict[i] = num1 # 将统计值赋值给字典内K值i
print(dict)
作业二:
2.编写员工管理系统
1.添加员工信息
2.修改员工薪资
3.查看指定员工
4.查看所有员工
5.删除员工数据
提示:用户数据有编号、姓名、年龄、岗位、薪资
数据格式采用字典:思考如何精准定位具体数据>>>:用户编号的作用
# 作业二
user_dict = {'001':{'name':'jaosn','age':'19','job':'boos','salary':'50k'}}
while True: # 定义一个循环# 添加一个用户提示功能print("""1.添加员工信息2.修改员工薪资3.查看指定员工4.查看所有员工5.删除员工数据6.退出程序""")while True:choice = input('please input your choice>>>:').strip() # 获取用户输入指令if choice == '1':user_id = input('please input your user_id>>>:').strip() # 获取用户编号if user_id not in user_dict: # 判断输入用户编号是否存在user_name =input('please input your user_name>>>:').strip()user_age = input('please input worker age>>>:').strip()user_job = input('please input worker job>>>:').strip()user_salary = input('please input worker salary>>>:').strip()new_dict = user_dict.fromkeys([user_id],{'name':user_name,'age':user_age,'job':user_job,'salary':user_salary}) # 添加字典数据值到新字典中 user_dict.update(new_dict) # 新字典赋值给原来的字典print(f'员工:{user_id}添加成功')continueelif choice == '2':user_id = input('please input your want to change id>>>:')if user_id in user_dict:user_dict[user_id]['salary'] = input('请输入您修改后的金额>>>:') # 修改字典中数据值print('您已成功修改他的薪资')else:print('请重新输入!!!')continueelif choice == '3':user_id = input('please input your worker id>>>:')if user_id in user_dict: # 查看字典中某一数据值print(f"""=============info================================id:{user_id},name:{user_dict[user_id]['name']},age:{user_dict[user_id]['age']},job:{user_dict[user_id]['job']},salary:{user_dict[user_id]['salary']}=================================================""")continueelif choice == '4':for user_id in user_dict: # for循环查看字典中所有数据值print(f"""=============info=================================id:{user_id},name:{user_dict[user_id]['name']},age:{user_dict[user_id]['age']},job:{user_dict[user_id]['job']},salary:{user_dict[user_id]['salary']}==================================================""")continueelif choice == '5':target_user = input('please input your target_user>>>:').strip()if target_user in user_dict: # 删除字典中某一数据值user_dict.pop(target_user)print(f'已删除用户{target_user}')else:print('请重新输入要删除的员工编号!!!')continueelif choice == '6':break # 结束程序else:print('请输入正确的指令!!!')break
小白学python系列————【Day15】垃圾回收机制及字符编码简史相关推荐
- Python学习:垃圾回收机制
Python 程序在运行的时候,需要在内存中开辟出一块空间,用于存放运行时产生的临时变量:计算完成后,再将结果输出到永久性存储器中.如果数据量过大,内存空间管理不善就很容易出现 OOM(out of ...
- 【Python核心】垃圾回收机制
Python程序在运行的时候,需要在内存中开辟出一块空间用于存放运行时产生的临时变量,计算完成后再将结果输出到永久性存储器中 如果数据量过大,内存空间管理不善就很容易出现OOM(out of memo ...
- python和ruby垃圾回收机制
先了解一下蟒蛇中的其他概念: 1.小整数对象池 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池,避免为整数频繁申请和销毁内存空间. Python对小整数的定义是[-5,257 ...
- python中的垃圾回收机制_python里面的垃圾回收机制
1.引用计数机制: python里每一个东西都是对象,它们的核心就是一个结构体:PyObject typedef struct_object { int ob_refcnt; #引用计数 struct ...
- python是不是特别垃圾-Python里的垃圾回收机制是什么意思,搞不懂?
常见的GC算法 引用计数 为每个内存对象维护一个引用计数. 当有新的引用指向某对象时就将该对象的引用计数加一,当指向该对象的引用被销毁时将该计数减一,当计数归零时,就回收该对象所占用的内存资源. 标记 ...
- 小白学python系列-(3)基础数量类型
整数 Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等. 计算机由于使用二进制,所以,有时候用十六进制表示整数比较方 ...
- 小白学python系列-(4)list
Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示 变量student就是一个list. ...
- 小白学python系列————【Day3】计算机基础认知(二)
今日内容概要 五大组成部分详解 三大核心硬件 操作系统简介 编程与编程语言 编程语言的发展史 编程语言的分类 python解释器简介 解释器下载 计算机五大组成部分详解(将计算机形象比喻为一个人) ...
- 小白学python系列————【Day8】运算符及流程控制语法
今日内容概要 运算符补充 1.逻辑运算 2.成员运算 3.身份运算 流程控制理论 流程控制详细语法 1.顺序结构 2.分支结构 3.循环结构 运算符补充 逻辑运算符 and与or或not非 and 同 ...
最新文章
- 每日一皮:不允许穿格子衫之后...
- jquery 对框架自适应高度 兼容各种浏览器
- 2020年奇安信校招JAVA岗笔试
- HDU 5936 Difference
- matlab 捕食者和猎物,MATLAB - 追求曲线(捕食者/猎物)
- 玩玩Xamarin Evolve 2016带来的新特性(三)-Xamarin Workbooks
- P4245 【模板】任意模数多项式乘法
- 使用CommandLineRunner或ApplicationRunner接口创建bean
- 上海市职业介绍中心长宁分中心武夷路513-517号(021)62400032-229
- 面向对象之多态,魔法函数
- android 混合现实,基于Android的增强现实客户端的设计与实现
- 上传文件块client实现
- 你需要的不是大数据——而是正确的数据
- 项目期复习:JS操作符,弹窗与调试,凝视,数据类型转换
- 视频水印素材 md5修改
- Android手机开发者模式
- Unity Text字体花屏
- flutter图标按钮_flutter 按钮封装 带图片的按钮,带边框的按钮,纯文字的按钮
- 信管师培训之第十一节课作业(法律法规+标准规范+职业道德)
- Creo 9.0安装教程