代码块
在python中一个模块,一个类,一个函数,一个文件等都是代码块。
def func(): print(333) class A: name = 'alex' #这些都是代码块
交互模式下,每一行是一个代码块。
>>> i1 = 1000 可以理解为这一行在一个文件中。 >>> i2 = 1000 可以理解为这一行在另一个文件中。 #在cmd中
在内存中id都是唯一的,如果两个变量指向的值的id相同,就证明他们在内存中是同一个。
is 判断的是两个变量的id值是否相同。
如果is是True, == 一定是True。
a1 = "ake123" a2 = "ake123" print(id(a1),id(a2)) #2446884656776 2446884656776
小数据池(缓存机制,驻留机制)
小数据池(缓存机制,驻留机制)
小数据池的应用的数据类型: 整数,字符串,bool值
小数据池,python对内存做的一个优化:
将 -5 ~256 的整数,以及一定规则的字符串,提前在内存中创建了池(容器),容器里固定的放了这些数。
为什么这么做???
1,节省内存。
2,提高性能与效率。
对于代码块
python在同一个代码块中的变量,初始化对象的命令时,它会将变量与值的对应关系放到一个字典中,
如果下面的代码在遇到初始化对象的命令,他会先从字典中寻找,如果存在相同的值,他会复用,指向的都是同一个内存地址。
python对于不同的代码块:初始化对象的命令时,他会从小数据池中寻找。
#同一个代码块 i1 = 1000 i2 = 1000 print(id(i1),id(i2)) #不同代码块 def func(): i1 = 1000 print(id(i1)) def func1(): i2 = 1000 print(id(i2)) func1() func()
编码
大环境python3x:
str:内存(内部)默认编码方式为Unicode。
bytes:python的基础数据类型之一,他和str相当于双胞胎,str拥有的所有方法,bytes类型都适用。
区别:
英文:
str:
表现形式:s1 = 'alex'
内部编码方式:unicode
bytes:
表现形式:b1 = b'alex'
内部编码方式:非unicode
中文:
str:
表现形式:s1 = '太白'
内部编码方式:unicode
bytes:
表现形式:b1 = b'\xe5\xa4\xaa\xe7\x99\xbd'
内部编码方式:非unicode
使用:
如果想将一部分内容(字符串)写入文件,或者通过网络socket传输,这部分内容(字符串)必须转化成bytes才可以进行。
平时在代码中,使用字符串。
str与bytes之间的转化
# str --- > bytes encode 编码 a1 = 'ake123' a2 = '元素' b1 = a1.encode('utf-8') print(b1) b2 = a2.encode('gbk') print(b2) # bytes ---> str decode 解码 b1 = b'\xd4\xaa\xcb\xd8' # gbk 的bytes s2 = b1.decode('gbk') print(s2)