一、代码块
Python程序是由代码块构造的。块是一个python程序的文本,他是作为一个单元执行的。
什么是代码块:一个py文件,一个函数,一个文件,一个类都是一个代码块。
作为交互方式输入的每一行都是一个代码块。
二、id is ==
id是内存地址,在内存中,id都是唯一的如果两个变量指向的值得id相同,就证明在内存中是同一个。
is判断的是两个变量的id值是都相同,如果is是True,==一定是True。
三、小数据池(驻留机制,缓存机制)
小数据池是python对内存做的一个优化:将-5~256的整数以及一定的规则的字符串,提前在内存中创建了一个池,池里固定的放了一些数据
目的:节省内存、提高性能与效率
小数据池应用的数据类型:整数,字符串,bool值
数字:-5~256的整数
bool值:就是True,False,无论你创建多少个变量指向True,False,那么他在内存中只存在一个。
字符串:
1,字符串的长度为0或者1,默认都采用了驻留机制(小数据池)。
2,字符串的长度>1,且只含有大小写字母,数字,下划线时,才会默认驻留。
3,用乘法得到的字符串,分两种情况。
1. 乘数为1时:
仅含大小写字母,数字,下划线,默认驻留。
含其他字符,长度<=1,默认驻留。
含其他字符,长度>1,默认驻留。
2. 乘数>=2时:
仅含大小写字母,数字,下划线,总长度<=20,默认驻留。
4,指定驻留。
from sys import intern a = intern('hello!@'*20) b = intern('hello!@'*20) print(a is b) #指定驻留是你可以指定任意的字符串加入到小数据池中,让其只在内存中创建一个对象,多个变量都是指向这一个字符串。
满足以上字符串的规则时,就符合小数据池的概念。
四、编码
编码之间不能互相识别
网络传输或者硬盘存储的010101,必须是以非uniconde编码方式的010101.(因为Unicode太占资源了,避免资源浪费和网络堵塞)
大环境python3x:
str:内存(内部)编码方式为unicode
bytes:python的基础数据类型之一,和str相当一双胞胎。
区别:
英文字母:
str表现形式:s1='alex' 内部编码方式:unicode
byte表现方式:s1=b'alex' 内部编码方式:非unicode
中文:
str表现形式:s1='太白' 内部编码方式:unicode
byte表现方式:s1=b'xe5xa4xaaxe7x99xbd' 内部编码方式:转换为utf-8
转换:
中文用encode只能转换为utf-8和gbk,英文可以转换成任意编码
name = '太白'
name = name.encode('utf-8')
print(name) #b'xe5xa4xaaxe7x99xbd'
name = '太白'
name = name.encode('gbk')
print(name) #b'xccxabxb0xd7'