代码块

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  &#128051;️南栀倾寒&#128051;️  阅读(163)  评论(0编辑  收藏  举报

导航