代码块
Python程序是由代码块构造的。块是一个python程序的文本,他是作为一个单元执行的。
代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块。
而作为交互方式输入的每个命令都是一个代码块。
什么叫交互方式?就是咱们在cmd中进入Python解释器里面,每一行代码都是一个代码块,例如:
一个文件,模块,类,函数 cmd一行就是一个代码块
python内置,为了节省资源,提高效率
数字: 范围 -5 ~ 256
字符串: 字符串进行乘法的时候总长度不能超过20
s1 = 'asdfghasdfghasdfghasdfgh'*20 #37714144 s2 = 'asdfghasdfghasdfghasdfgh'*20 #37711712 print(id(s1),id(s2))
代码块的缓存机制
Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其重用。换句话说:执行同一个代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录那么它会重复使用这个字典中的之前的这个值。所以在你给出的例子中,文件执行时(同一个代码块)会把i1、i2两个变量指向同一个对象,满足缓存机制则他们在内存中只存在一个,即:id相同。
代码块的缓存机制的适用范围: int(float),str,bool
int(float):任何数字在同一代码块下都会复用。
bool:True和False在字典中会以1,0方式存在,并且复用。
str:几乎所有的字符串都会符合缓存机制,具体规定如下(了解即可!):
1,非乘法得到的字符串都满足代码块的缓存机制:
1
2
3
|
s1 = '宝元@!#*ewq' s2 = '宝元@!#*ewq' print(s1 is s2) # True |
2,乘法得到的字符串分两种情况:
2.1 乘数小于等于1的时候,任何字符串满足代码块的缓存机制:
1
2
3
|
s1 = '好嗨啊,感觉自己身体要到了.932023756QQ932023756' *1 s2 = '好嗨啊,感觉自己身体要到了.932023756QQ932023756' *1 print(s1 is s2) |
2.2 乘数>=2时:仅含大小写字母,数字,下划线,总长度<=20,满足代码块的缓存机制:
s1 = 'old_' * 5 s2 = 'old_' * 5 print(s1 is s2) # True
优点:能够提高一些字符串,整数处理人物在时间和空间上的性能;需要值相同的字符串,整数的时候,直接从‘字典’中取出复用,避免频繁的创建和销毁,提升效率,节约内存。
# 一个文件就是一个代码块:
def func():
a = 'asd@fasdf'* 200
print(id(a))
def func1():
b = 'asd@fasdf'* 200
print(id(b))
print(func(),func1())
posted on 2019-01-06 16:49 🐳️南栀倾寒🐳️ 阅读(163) 评论(0) 编辑 收藏 举报