真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python中的代碼塊和非代碼塊是什么-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

超過10多年行業(yè)經(jīng)驗(yàn),技術(shù)領(lǐng)先,服務(wù)至上的經(jīng)營(yíng)模式,全靠網(wǎng)絡(luò)和口碑獲得客戶,為自己降低成本,也就是為客戶降低成本。到目前業(yè)務(wù)范圍包括了:成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì),成都網(wǎng)站推廣,成都網(wǎng)站優(yōu)化,整體網(wǎng)絡(luò)托管,微信平臺(tái)小程序開發(fā),微信開發(fā),重慶APP開發(fā)公司,同時(shí)也可以讓客戶的網(wǎng)站和網(wǎng)絡(luò)營(yíng)銷和我們一樣獲得訂單和生意!

今天就跟大家聊聊有關(guān)Python中的代碼塊和非代碼塊是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

代碼塊的定義

Python程序是由代碼塊構(gòu)造的。代碼塊是作為一個(gè)單元執(zhí)行的一段Python程序文本。

也就是說一個(gè)類,一個(gè)函數(shù),一個(gè)腳本文件都是一個(gè)代碼塊,此外,當(dāng)你以交互式的方式輸入的時(shí)候,一行就是一個(gè)代碼塊。

Python中的代碼塊和非代碼塊是什么

這是在ipython解釋下以交互式方式輸入,那么這個(gè)時(shí)候每一行就是一個(gè)代碼塊。

如果是在類似pycharm環(huán)境運(yùn)行,那么整個(gè)腳本文件都是一個(gè)代碼塊。前提是沒有函數(shù)或者類。

代碼塊的緩存機(jī)制

如果在同一個(gè)代碼塊內(nèi),會(huì)存在有一個(gè)緩存機(jī)制。

同一個(gè)代碼塊內(nèi),對(duì)對(duì)象進(jìn)行初始化的時(shí)候,python解釋器會(huì)在內(nèi)存中尋找這個(gè)初始化的值是不是已經(jīng)存在,如果存在則會(huì)引用自同一個(gè)內(nèi)存空間。也就是說我們用is進(jìn)行判斷,應(yīng)該返回的是True。也就是python解釋器從上到下進(jìn)行解釋,遇到一個(gè)初始化的對(duì)象,就把這個(gè)對(duì)象,以一個(gè)類似字典的形式存在一個(gè)內(nèi)存空間中。如果再遇到初始化語句,解釋器就在這個(gè)內(nèi)存空間尋找是否有同值的對(duì)象,如果有,則引用,如果沒有,則重新開辟一個(gè)內(nèi)存空間存放這個(gè)初始化的值。

這個(gè)機(jī)制適用的對(duì)象有:int,float,complex ,boolean,str,其中字符串要符合一定規(guī)則的,否則不會(huì)存在這個(gè)緩存機(jī)制。

下面來進(jìn)行一些驗(yàn)證:

a = 100000000000000000000532758932759.419375091750151513515
b = 100000000000000000000532758932759.419375091750151513515
print(a is b)  # True

Python中的代碼塊和非代碼塊是什么

c = '1478174%^%&$^&$&sfhoaihfoiaf'
d = '1478174%^%&$^&$&sfhoaihfoiaf'
print(c is d)  # True

Python中的代碼塊和非代碼塊是什么

其實(shí)不管你整數(shù)或者小數(shù)有多長(zhǎng),都符合這個(gè)緩存機(jī)制,都是指向同一個(gè)內(nèi)存地址。但是字符串就不一樣了。

其實(shí)也算不上什么限制,看一下驗(yàn)證:

s_1 = '#'*4000
s_2 = '#'*4000
print(len(s_1))
print(s_1 is s_2)  # True
a_1 = '#'*4097
b_1 = '#'*4097
print(len(a_1))
print(a_1 is b_1)  # False

Python中的代碼塊和非代碼塊是什么

在pycharm中測(cè)試大概字符串做乘法后長(zhǎng)度不超過大約4097長(zhǎng)度,那么還是符合這個(gè)機(jī)制的。

即便是中文也是符合這個(gè)的。

不管你是中文加符號(hào)加空格加數(shù)字加字母,只要長(zhǎng)度不超過大約4097那么應(yīng)該是符合這個(gè)機(jī)制的。都指向的是同一內(nèi)存地址。

這樣做的優(yōu)點(diǎn)就是簡(jiǎn)化了內(nèi)存空間,提升效率,避免重復(fù)的去開辟相同的值的內(nèi)存空間

非同一代碼塊的緩存機(jī)制

非同一代碼塊的緩存機(jī)制其實(shí)和代碼塊的緩存機(jī)制很像,只不過對(duì)緩存的數(shù)據(jù)做了一些限制,將符合規(guī)定的數(shù)據(jù)存到了一個(gè)數(shù)據(jù)池當(dāng)中,也就是一塊內(nèi)存空間中。

如果你初始化對(duì)象值在這個(gè)數(shù)據(jù)池中,那么直接引用就可以,不用再重新開辟一個(gè)內(nèi)存空間存放這個(gè)值。這個(gè)數(shù)據(jù)池分為數(shù)字?jǐn)?shù)據(jù)池和字符串?dāng)?shù)據(jù)池,數(shù)字?jǐn)?shù)據(jù)池是事先已經(jīng)創(chuàng)建好了的。

對(duì)于非同一代碼塊,符合機(jī)制的數(shù)據(jù)類型有 int,boolean,str

其中,整數(shù)只有(-5~256)

對(duì)于字符串,我看很多博客只寫了只有全是數(shù)字,字母,下劃線組成的字符串才符合這個(gè)機(jī)制,其實(shí)長(zhǎng)度為1的字符串或者空字符串也是符合這個(gè)機(jī)制的。但是不能是中文。

下面進(jìn)行一些驗(yàn)證,這里用的是jupyter,是ipython解釋器的交互式命令工具,也就是說每一行就是一個(gè)代碼塊

Python中的代碼塊和非代碼塊是什么

下面是字符串的驗(yàn)證:

Python中的代碼塊和非代碼塊是什么

當(dāng)字符串做乘法的時(shí)候,和同一代碼塊的機(jī)制很像,但是只能是只有數(shù)字下劃線和字母的字符串做乘法之后長(zhǎng)度小于大約4097的長(zhǎng)度才會(huì)駐留。

Python中的代碼塊和非代碼塊是什么

上面均采用jupyter為測(cè)試環(huán)境,每一行都是一個(gè)代碼塊。

如果是函數(shù)或者類和函數(shù)或類外部的非同一代碼塊。因?yàn)楹瘮?shù)和類本身就是一個(gè)代碼塊。

強(qiáng)制駐留

也叫指定駐留,意思就是你可以制定一個(gè)字符串加入到字符串?dāng)?shù)據(jù)池中,后面的如果有對(duì)象初始化是這個(gè)值,則可以直接引用。

Python中的代碼塊和非代碼塊是什么

import sysa =sys.intern('&&^*^&*123')
b = sys.intern('&&^*^&*123')
print(a is b)  # True

非同一個(gè)代碼塊,’&&*&*123’不符合字符串?dāng)?shù)據(jù)池的緩存機(jī)制,但是可以用sys模塊的intern方法,強(qiáng)制駐留,強(qiáng)行加入到字符串?dāng)?shù)據(jù)池中。

看完上述內(nèi)容,你們對(duì)Python中的代碼塊和非代碼塊有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝大家的支持。


分享名稱:Python中的代碼塊和非代碼塊是什么-創(chuàng)新互聯(lián)
分享鏈接:http://weahome.cn/article/ijsdd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部