我这烂掉的十月,总之就是各种事情+偷懒,十月份都过去一半了,我才推进一天,总而言之言而总之 我是废物。
今天主要学了字符编码,学这种东西会让我有一种充实感,上节课复习都是在上周看了,不再赘述。字符编码的话主要就是各国语言之间的问题,但中间横空出世了一个全国通用的unicode,能够与市面上所有的语言转换,但有点费内存,于是又横空出世了一个utf-8,省内存,但只能与unicode转换,各有千秋吧!
下班!
目录0 上节课复习
0.1 列表类型内置方法
- 可变
- 有序
- 优先掌握:
- 索引
- 切片
- 成员运算
- 删除 del
- for循环
- 长度len
- 追加 append
- 需要掌握:
- insert 在索引值前面插入
- pop删除最后一个。也可以加入索引值删除指定的
- remove 删除
- count 统计某一元素出现次数
- index 索引值 (阿拉伯数字,即出现的位置,当多个时以第一个为准)
- clear 清空列表,为一个操作 不能直接输出
- copy 复制列表
- reverse 逆序
- extend 加入元素 可以在后面接个列表
- sort 按字母从小到大排序
0.2 元组类型内置方法
- 没有可变不可变
- 有序
- 优先掌握:
- 索引
- 切片
- 长度len
- for循环
- 成员运算
- count 计算成员出现次数
- index 计算成员首次出现的索引值
0.3 字典类型内置方法
- 可变
- 无序
- 优先掌握:
- 按键取值
- 计算长度len
- for循环
- values keys items
- 成员运算
- 删除del
- 需要掌握:
- get 也是取值,好处是当键不存在时会报错,且若设有默认值会返回默认值
- update 更新,有则更新,无责添加
- fromkeys 创建列表,两个元素,第一个为键的列表,第二个为键的值,每个键的值都一样都是第二个元素
- setdefault 增加一个键值对进去,如果该键已存在,则不改变原来的值
0.4 集合类型内置方法
- 可变
- 无序
- 优先掌握:
- 长度len
- 成员运算 in or not in
- 并集 | union
- 交集 & intersection
- 差集 - difference
- 对称差集 symmetric_difference ^
- 父集 > >=
- 子集 < <=
- ==
- 需要掌握:
- add 添加一个元素
- remove 移除一个元素 不存在会报错
- discard 移除一个元素 不会报错
- update_difference 移除集合a中拥有的集合b的元素,如a=1,2,3 b=1,5,6,那么运算的结果为a = 2,3
- isdisjoint 判断a与b之间交集是否为空,若为空,返回true 反之返回false
0.5 数据类型总结
可变 | 不可变 |
---|---|
列表/字典/集合 | 整形/浮点型/字符串 |
有序 | 无序 |
---|---|
字符串/列表/元组 | 字典/集合 |
一个值 | 多个值 |
---|---|
整形/浮点型/字符串 | 元组/集合/列表/集合 |
0.6 拷贝
- 拷贝,l2=l1。如果l2是l1的拷贝,则l1内部的任何类型元素发生变化,l2都会相应发生改变
- 浅拷贝,l2=copy.copy(l1)。如果l2是l1的浅拷贝,则当l1内部的可变类型元素发生变化时,l2对应的元素会发生相应的变化;当l1内部的不可变类型元素发生了变化,则l2不会发生改变。
- 深拷贝,l2=copy.deepcopy(l1)。如果l2是l1的深拷贝,则当l1内部的可变类型元素发生变化时,l2对应的元素不会发生相应变化;当l1内部的不可变类型元素发生变化时,l2不会发生变化;即无论l1内的任何类型元素发生变化,l2内的元素均不发生变化。
1 字符编码
1.1 文件编辑器存取文件的原理
- 打开编辑器就相当于启动了一个进程,是在内存中进行的,输入的数据也是在内存中的,断电后会消失
- 想要永久保存就需点击保存按钮,将其永远保存在硬盘中
- 在我么编写一个py文件时跟编写其他文件都一样,都是一堆字符罢了
1.2 python解释器执行py文件的原理
- 第一阶段:python解释器启动,相当于启动了一个文件编辑器
- 第二阶段:python解释器相当于文本解释器,打开test.py文件,将硬盘中的test.py文件内容读入到内存中
- 第三阶段:python解释器会执行刚刚读入到内存中的test.py中的内容
1.3 python解释器与文本解释器的异同
-
都能干什么: 把硬盘中躺着的数据读入到内存中,并显示
-
不同:python解释器还会多执行解释的步骤
1.4 字符编码介绍
1.4.1 什么是字符编码
字符编码就是将人类的字符编码中计算机能够识别的数字,这种编码必须遵循一定的标准,该标准无非是数字与字符之间的对应关系,称之为字符编码表
1.4.2 涉及到字符编码的两个场景
- 一个python文件是由字符编码组成的,其存取过程均涉及字符编码(此时python文件里的内容没有被执行,即处于python解释器执行py文件的前两步)
- python文件中的数字类型字符串是由一串字符组成的(此时python文件里的内容已经被读取执行,即处于执行python解释器执行py文件的第三步)
1.4.3 字符编码的发展过程
- 美国人发明计算机 并制作的 ASCII编码表 但其只包括字母和数字
- 没有日语 汉语 韩语 于是就有了 shift_jis(日语) euc-kr(韩语) gbk(汉语)
- 但是不同的语言的编码不互通 即 你日本的代码(shift_jis)在我中国的电脑上(gbk)无法执行,会乱码,迫切需要一个全国统一的标准,此时unicode应运而生,ascii用1个字节(8位二进制)代表一个字符;Unicode常用2个字节(16位二进制)代表一个字符,生僻字需要用4个字节
- 但是你看,一个字母a 用ascii码只用占据一个字节 但用unicode需要两个字节,好浪费空间哦,为了节省空间,哎,我们的utf-8又应运而生了。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节
- 哎,相信细心的你我都发现了(没发现看上面标黄*-*),这个utf-8对应的是unicode,是两者之间转化的,ascii能编码成utf-8吗?gbk能吗?shift_jis能吗? 那必然不能了 这就是局限性,因此目前计算机中内存中的解码器仍然还是用的unicode
1.4.4 乱码分析
首先明确概念:
- 存文件:文件从内存到硬盘
- 读文件:文件从硬盘到内存
主要两种情况:
-
存文件时就已经乱码:存文件时文件里有多种代码,但已某一种去存
-
存文件不乱码而读文件时乱码:存文件是用的全国通用utf-8,但读文件时用的gbk,可解决,选择正确的解码方式即可
2 总结
-
pycharm右下角控制的是你写入的代码字符以什么编码格式保存
-
coding:utf-8 控制的是python3作为文本编辑器的时候以什么编码格式读取内容文本,python3默认是utf-8的形式读取字符
-
python解释器解释语法
解释定义变量的语法,因此会开辟一块内存空间放入这个变量,然后这个变量在python3中以unicode的形式存储,如字符x = ‘中’,被python3解释后在内存中会变成x = ‘ 1010101010101100’ ,理论上‘print(x)’相当于输出 ’ 1010101010101100‘,但是这个’1010101010101100‘对程序员来说看不懂,所以python3的创始人龟叔做了这个操作吧’1010101010101100‘编码按终端的编码格式输出编码后的结果,如‘上',终端可以把这个终端编码格式的二进制显示成中文
-
为什么python3解释器要把变量以unicode的形式存储