栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python垃圾回收机制 字符编码概述 字符编码相关操作 代码操作文件

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python垃圾回收机制 字符编码概述 字符编码相关操作 代码操作文件

Python垃圾回收机制 字符编码概述 字符编码相关操作 代码操作文件
  • 垃圾回收机制
    • 引入
    • 一般编程语言的编写
    • Python编写代码
  • python的垃圾回收机制工作原理
    • 引用计数
      • 循环引用
    • 标记清除
    • 分代回收
  • 字符编码
    • 简介
    • 发展史
  • 字符编码实操
    • 如何解决乱码
    • 编码与解码
    • 解释器层面
  • 文件操作
    • 简介
    • 如何用代码操作文件
    • 补充知识

垃圾回收机制 引入
在使用python编程的时候,电脑会存储数据,需要对存储空间进行申请和释放。
而中间的操作都不需要程序员的操作是因为python会自动执行以上操作
一般编程语言的编写
申请内存空间的代码
name = John
释放内存空间的代码
Python编写代码
只需要正常编写,省去了申请和释放内存空间的步骤
name = John
'''这一切归功于python能在编程时动态的管理电脑内存'''
python的垃圾回收机制工作原理
  • 引用计数
  • 标记清除
  • 分代回收
引用计数
name = 'John'  #当前数据值John的引用计数为1
name1 = 'John' #当前数据值John的引用计数为2
del name1	   #当前数据值John的引用计数为1

#当数据值的引用计数不为0的时候,表示该数据值还在使用,不删除
#当数据值的引用计数为0时,该数据值会被垃圾回收机制回收
'''引用计数存在一个坑''' >>> 循环引用
循环引用


运行结果

#上图中 两个变量都互相绑定了对方列表的新的索引值
del l1
del l2
#就算将两个变量解绑了对应的两个列表,
#但列表内的数据的引用计数不是0
#意味着回收机制识别不出这两个垃圾数据
'''这个现象被称为循环引用'''

那么该如何解决循环引用现象
这里我们就用到第二点’‘‘标记清除’’’

标记清除
这个方法就是通过将内存中程序产生的所有数据值
全部检查一遍是否存在循环引用来解决循环引用的问题
并将检测出存在的循环引用打上记号 然后一次性清除
分代回收
标记清除每间隔一段时间就需要将所有的数据排查一遍
这么做的资源消耗过大,所以就会有分代回收这一功能


以上为抽象分代回收流程图

为了减轻垃圾回收机制的资源消耗 python开发了三代管理
每一代管理比上一代管理时间间隔更长
字符编码 简介
*字符编码只针对文本文件,是文本文件才有的概念
*因为计算机内部存取数据的本质是:二进制(只能识别0和1)
所以人与计算机之间存在一个人类字符与数字的转换关系
于是就有'''字符编码表'''的存在,用于让计算机显示人类字符
发展史
  • 阶段一(一家独大)
    • 由于计算机是由美国人发明的,所以第一个编码表只能识别英文字符。(ASSCII码)
    • 因为所有的英文字符加起来不超过127个,同时美国人考虑以后可能会增添新的字符以备不时之需,所以使用了八位二进制来记录
    • 此时的计算机智能识别英文 不能识别其他文字
0000000(2的7次方等于128)00000000(八位)
A-Z			65-90
a-z			97-122
  • 阶段二(群雄割据)
    • 中国(GBK码):记录了中文字符,英文字符,数字的对应关系。并以 2bytes起步储存中文(生僻字会用更多字节),1bytes储存英文。
    • 韩国(Euc_kr码)
    • 日本(shift_JIS码)
此时的各国计算机文本文件无法直接交互,会出现乱码的现象
  • 阶段三(天下统一)
    • 万国码(unicode): 兼容万国字符
      (所有字符全部使用2bytes起步储存)
    这导致有时候不同语言的文本转换会产生巨大的文件大小差异
    
    • 于是就有了最后一个字符编码
      • utf家族(unicode transformation format)
    UTF是针对unicode的优化版本
    其中使用频率最高的是utf8
    内存使用的是兼容万国的万国码unicode,而硬盘使用的是utf来减少IO操作时间
    
    
字符编码实操 如何解决乱码
	用原存储文档时的编码解开
编码与解码
	编码(人类的字符>>>计算机的字符)
		将人类的字符按照指定的编码转换成计算机可以识别的数字
s1 =  ' 学不die就往die里学'
res = s1.encode('utf8')
print(res, type(res))

	解码(计算机的字符>>>人类的字符)
		将计算机能够识别的数字按照指定的编码转成人类可以读懂的字符
res1 = res.decode('utf8')
print(res1)

解释器层面
要注意的是python2默认的编码是ASCII码
只需要在代码的开头 加上 # coding:utf8(文件头:告诉解释器要使用什么编码), 然后在所有字符串前
添加字母 u(定义字符串) 即可运行python3的代码

*将来在使用python2定义字符串的时候,务必将所有字符串前加u 
字母u在字符串前的含义为 让python2解释器用 unicode存储字符串数据
*python3默认编码为utf8,不存在乱码的问题
文件操作 简介
文件可以理解为
操作系统展示给用户从而让用户可以操作计算机硬盘的方式之一。

文件操作就是通过编写代码让电脑自动操作文件的读写
如何用代码操作文件

首先新建一个文件 a.txt

那么该如何写代码去读取这个文件呢

res = open('a.txt','r',encoding='utf8')
print(res.read())  #通过这个代码就可以读取目标文件


然后关闭文件

res.close()

打开代码内的具体参数为

open(文件路径,读写模式,字符编码)
这个open有两种方式使用

第一种

f = open() #用一个变量接收open方法
print(f.read()) #显示读取的文字
f.colse() #关闭

第二种

with open('a.txt', 'r', encoding='utf8') as f:
	print(f.read())  #这个with语法的好处在于,当他的字代码运行结束后,会自动调用close()方法

以上f均为变量名,可以更换其他变量名

补充知识
可以通过在字符串前面添加'r'>>>resource 就可以取消字符串内的特殊含义

字符串前面加	f'{}' 格式化输出
			u 让python2解释器用 unicode存储字符串数据
			r 取消字符串内的特殊含义
'''如果编码是纯英文或数字 可以简写'''
res = 'John said no'
print(res.encode('utf8'))
print(b'John said no')
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997312.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号