Python学习笔记 第六天
1.学习内容回顾与拓展
1.1 字典
使用可哈希的数据类型作为key
字典的增删改查操作,具体内容看昨天笔记
嵌套,解包等
2.今日学习内容
2.1 is与"=="的区别
2.1.1 变量 :用来identify(标识)一块内存区域,为了方便表示内存,操作变量的实质是:操作变量指向的那块内存单元。 编译器负责通知计算机分配内存。可以使用Python内置函数id()来获取变量地址,id(object)返回 对象object在其生命周期内位于内存中的地址
2.1.2 内存 :内存是电脑硬件用来存储数据的,可以理解为:内存是由一个个小格子组成,每个格子的大小是一个字节,只能存放1byte的数据。需要依赖内存地址来查找数据。地址是内存的标识符,相当于门牌号。
找内存地址-》操作内存-》表现为:操作变量
2.1.3 区别
在python中一切皆对象,对象之间能否用"=="和is,区别在于:
is是比较两个对象的id是否相等,也就是比较两个对象是否为同一个实际对象,是否指向同一块内存。
"=="是比较两个对象的内容是否相等,默认调用对象de __eq__()方法
Python内部做了优化工作,对于整数对象,Python把一些频繁使用的整数对象缓存起来,保存到small_list链表中。在Python的整个生命周期中,任何调用这些小整数的地方,都不需要重新创建一个对象。范围是[-5到256]
注意:
1.小整数对象是全局解释器内重复使用,永远不会被回收。同一个代码块中的不可变对象,只要值相等,就不会创建新的对象。
2.出于对性能的考虑,凡是不可变对象,在同一个代码模块中,只要是值相同的对象,都不会被重复创建。
(字符串中单个*20以内,内存地址是一样的。如果超过,即*21以上,内存地址还是不同的。切不能存在特殊字符,即必须全部由字母组成)(Python3.7及以后的版本不适用)
3.不仅是整形,字符串也同样遵守上述规则
复习:可变类型与不可变类型
可变数据类型
元组tuple 字符串string 整数int 布尔类型 bool
可变数据类型:
列表list 字典dict 集合set
2.1.4 代码块:程序的最小基本单位
Python程序便是基于代码块组成的。
一个代码块文件,一个函数体,一个类,交互式命令行中的单行代码都算是代码块。
在一个py文件中,情况类似,但是又不一样的地方。
1.int类型,只要在同一个代码块中的值相同,地址则相同
2.str类型,只要长度不超过20,哪怕含有特殊字符,地址也相同
3.编码与解码
3.1 常见编码:二进制 01
3.2 编码与解码(以ASCII为例)
3.2.1 简介
编码与解码是一种映射关系。
解码,比如ASCII中的字符A对应的十进制是65,对应的二进制编码为0100 0001。
编码即为解码的逆向工程,当计算机读到 0100 0001 就对应ASCII的表中查看,对应为A
解码encode:真是字符与二进制串的对应关系,即
真实字符->二进制串
编码decode:二进制串与真实字符的对应关系,即
二进制串->真实字符
注意:1.编码和解码应该是同一个码
2.在文件开头,指定编码,例如
#-*-coding:utf-8-*- (python)
<meta charset = 'utf-8'>(html)
@charset'utf-8'(CSS样式)
3.2.2常见编码方式
3.2.2.1 ASCII
不支持中文,支持英文 数字 符号
8位一个字节
3.2.2.2 GBK 国标码
支持中英文,数字和符号
英文 16位 2字节
中文 16位 2字节
3.2.2.3.Unicode 万国码
支持中英文,数字和符号
英文 32位 4字节
中文 32位 4字节
3.2.2.4.UTF-8 长度可变的万国码
支持所有
英文 8位 1字节
中文 24位 1字节
注意:Python 2 默认使用 ASCII编码,Python 3 默认使用Unicode显示所有内容 pycharm默认使用UTF-8