垃圾回收机制
- 对于垃圾回收机制,我们需要掌握三点:
1.引用计数
# 1.我们创建一个变量名,给这个变量名进行赋值。
# 2.此时由于变量名只绑定了一个数据值,所以此刻数据值的引用计数就为1
age = 21
# 3.我们依照刚才步骤,再次创建一个新变量名,给其赋值给原变量名。
# 4.此刻新旧变量名都与数据值21进行了绑定。所以此刻数据值引用计数就为2
age = 21
age1 = age
# 5.当我们删除新变量名后,数据名与新变量名断开绑定。
# 6.此刻数据值又只被原来的变量名绑定。引用计数就为1
age = 21
age1 = age
del age1
- 对循环引用,使用引用计数处理会使其留有垃圾数据。不推荐对其使用。
2.标记清除
- 将所有数据值筛查一遍,找到其中的循环引用,标记后直接删除,这就是标记清除。
# 1.定义两个变量
item = ['tom', ]
item1 = ['juzi', ]
# 2.在变量中添加数值
item.append(item1) # item里面被新添加了数据值,所以引用计数为2
item1.append(item) # item1里面被新添加了数据值,所以引用计数为2
# 3.标记变量名,删除与列表的绑定关系
del item # 列表引用计数减一
del item1 # 列表引用计数减一
3.分代回收
- 分三代管理,每代会将使用次数多的数据值给下一代,所以越往下检查的频率越低。
- 目的是为了减轻垃圾回收机制的资源损耗。
字符编码的简介,发展,实操
简介
- 1.只有文本文件才有字符编码的概念
- 2.计算机内部存取数据的本质是二进制
- 3.计算机与人类文字之间存在一个转换关系。所以我们才能敲出来汉语等语言。
- 4.转换关系应该有统一的标准,所以字符编码表记录了人类的字符与数字的对应关系.
发展
- 主要分为三个阶段
1.一国独大
- 1.计算机创造的初期,美国佬为了识别英文字符,就编写了ASCII码。当时的计算机只能识别英文。1bytes来存储字符
2.遍地开花
- 2.后面计算机传到各个国家之后,由各个国家制订编写了属于自己国家的编码。比如中国的GBK码,2bytes甚至更多来存储中文,1bytes存储英文
3.一统天下
- 3.为了统一编码,万国码(unicode)就出来了,它能够兼容兼容各个国家的字符。由于是2bytes起步存储。对于英文存储会是文件变大很多,最后通过优化采用了utf家族(utf8)
- ps:内存使用unicode 硬盘使用utf8
实操
- 1.怎么解决乱码 什么形式编码存的就以什么形式编码解码
- 2.编码与解码 编码(人类的字符>>计算机的字符)
解码(计算机的字符>>人类的字符)
- 3.解释器层面 python2默认的编码是ASCII码 由于python2发布的时间,utf编码还没出来。所以无法直接对字符串编码。
为了补救:
1.文件头
# coding:utf8
2.定义字符串
需要在字符串的前面加u
python3默认的编码是utf8码
文件操作简介
文件操作
- 通过编写代码自动操作文件读写
文件是什么
- 1.双击文件图标是从硬盘加载数据到内存
- 2.文件的保存其实就是将内存中的数据刷到硬盘
- 3.文件其实是操作系统暴露给用户操作计算机硬盘的快捷方式之一
如何通过代码操作文件
open(文件路径,读写模式,字符编码)
方式1:
f = open()
f.close()
方式2:
with open() as 变量名:
***子代码运行结束之后自动调用close()方法
特别注意
- 针对文件的路径,当字母与\结合时,需要在字符串前面添加字母r取消其特殊含义。
小练习
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']
l = dict() # 定义一个空字典l
for i in l1:
if i in l: # 判断元素在空字典l内
l[i] += 1 # 每次循环让字典内次数自增1
else: # 元素不在空字典l内
l[i] = 1
print(l)
输出结果:
2.编写员工管理系统
1.添加员工信息
2.修改员工薪资
3.查看指定员工
4.查看所有员工
5.删除员工数据
提示:用户数据有编号、姓名、年龄、岗位、薪资
数据格式采用字典:思考如何精准定位具体数据>>>:用户编号的作用
自己的梳理的一些逻辑不知道对不对。
定义一个列表
1.输入正确命令进入指定模块
添加模块:
1.判断员工姓名在不在列表
1.不在列表可以添加,添加方式为字典
2. 在列表提醒添加失败,该用户在列表内
修改模块
2.看员工在不在列表
1.进入员工列表修改工资
2.编码错误没有提示重新输入
查看指定员工
3.输入员工编号姓名判断员工有没有
1.有的话打开
2.没有的话提示重新输入
查看所有员工
4.打印所有列表
删除员工数据
5.输入员工编号,判断在不在里面
1.在里面删除
2.不在里面提示重新输入:
2.输入错误命令提示重新输入
没做出来,这个只是大致框架。是我太菜了,在努力了,在努力了。
l =[{'编号': '1', '姓名': 'jason', '年龄': '27', '薪资': 50000, '岗位': '金牌讲师'}]
l1 = []
while True:
text= input("""
输入1增加员工信息
输入2修改员工薪资
输入3查看指定员工
输入4查看所有员工
输入5删除员工数据
请选择你要进行的操作:""" )
if text == '1':
shur = input('请输入添加的员工信息:').strip()
if shur in l:
print('添加失败,员工已存在')
else:
l1 = l.append(shur)
print(l)
print('添加成功')
elif text == '2':
shur = input('请输入修改的员工信息:').strip()
if shur in l:
l[0]['岗位'] = 20000
print(l)
else:
print('员工信息输入不正确')
elif text == '3':
shur = ('请输入需要查看的员工编码').strip()
if shur in l:
print(l1)
print()
elif text == '4':
print(l)
elif text == '5':
shur = input('请输入员工编码:').strip()
if shur not in l:
print('无该员工信息,请重新输入')
continue
else:
del l[0]
else:
print('无效的指令,请重新输入')