python函數(shù)生命周期 python 生命周期

如何理解“python中函數(shù)是一等公民”?

單純的理解“python中的函數(shù)是一等公民”這句話,可能包含幾層意思:

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供科爾沁左翼網(wǎng)站建設(shè)、科爾沁左翼做網(wǎng)站、科爾沁左翼網(wǎng)站設(shè)計、科爾沁左翼網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、科爾沁左翼企業(yè)網(wǎng)站模板建站服務(wù),10多年科爾沁左翼做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

正確的理解是:第1點和第2點,不包含第3點的意思。

python中的函數(shù)是一等公民,重點想表述的是: 在python世界人人平等 。

人人平等的世界,至少應(yīng)該包含兩層意思:1. 身份地位平等; 2. 行使的權(quán)利平等。

打印結(jié)果是:

從上面的打印結(jié)果中可以看出:

1.Python 程序中的所有數(shù)據(jù)都是某個類的實例,因而是一個對象;

2.類本身也是一個對象。int, float, str, list, dict, set, fuction, module, NoneType, object, type等,這些類都是type類的實例,也是一個對象;

3.object類是所有類的基類

4.object是頂級父類

函數(shù)function和其他公民一樣,他們的都有一個共同的身份:對象 。

在c++和java里,數(shù)據(jù)是數(shù)據(jù),動作是動作,他倆的結(jié)合是類(class)。對于python,數(shù)據(jù)是數(shù)據(jù),動作也可以是數(shù)據(jù),這個牛逼的數(shù)據(jù)叫做對象object。

對于函數(shù)function來講,既可以安靜的做一個數(shù)據(jù),又可以優(yōu)雅的執(zhí)行動作。

Python 官方文檔里這樣解釋 對象(object) 的含義:Python 中的對象是對數(shù)據(jù)的抽象,Python 程序中所有數(shù)據(jù)都是由對象或者對象間的關(guān)系來表示的。每個對象都有各自的編號、類型和值。

兩個祖先(a和b)占了相鄰的兩塊內(nèi)存,一個可以與它的“后代”共用內(nèi)存,一個卻只能讓“后代”另立門戶;當(dāng)它們走完自己的生命周期后,b會馬上被當(dāng)垃圾回收,內(nèi)存地址遺產(chǎn)被剝奪,然而a卻形滅而實存,蔭庇后世。

Python為這些對象傾斜資源,也就是為某種階層固化提供了合法性。劃分的依據(jù)是因為它們比較常用,共用內(nèi)存就意味著減少開支,提高內(nèi)存使用效率。

這就是Python有趣的地方了,一面是全體公民,一面是特權(quán)種族,組成了看似矛盾的二元對立結(jié)構(gòu)。

參考:

python 函數(shù)外面的變量能在里面使用嗎?

這涉及到變量的生命周期問題,一般的,在函數(shù)里面聲明的變量在函數(shù)外是不起作用的。

一個比較簡單的解決辦法是你在函數(shù)外就先聲明這個變量,聲明成全局變量。然后在函數(shù)里面進行操作和賦值。

最后就能在函數(shù)外獲取變量的值了。例如:

123456 x = 0def a(): x = 2if __name__ == '__main__': a() print x

最終x打印出來的結(jié)果就是2

python中變量的引用、可變和不可變類型、局部變量和全局變量

變量的引用

變量和數(shù)據(jù)都是保存在內(nèi)存中的

變量和數(shù)據(jù)是分開存儲的

數(shù)據(jù)保存在內(nèi)存中某個位置,通過地址來標(biāo)記

變量保存的是數(shù)據(jù)的地址,通過地址可以找到數(shù)據(jù)在內(nèi)存空間的位置

把變量保存數(shù)據(jù)地址的過程稱為引用

變量的重新賦值修改的是變量中引用數(shù)據(jù)的內(nèi)存地址

變量之間的賦值實際是引用的傳遞

函數(shù)參數(shù)的傳遞,本質(zhì)也是引用的傳遞

函數(shù)的返回值本身也是引用的傳遞

可變和不可變類型

不可變類型,內(nèi)存中的數(shù)據(jù)不允許被修改:數(shù)字類型(int,bool,float,complex,long(2,x)、字符串、元組(tuple)

可變類型,內(nèi)存中的數(shù)據(jù)可以被修改:列表list、字典dict

無論是可變還是不可變數(shù)據(jù)類型,通過賦值語句,都會改變變量的引用

Hash函數(shù)只能接收不可變數(shù)據(jù)類型,字典的鍵也只能是不可變數(shù)據(jù)類型,字典的value值可以是任意數(shù)據(jù)類型

局部變量

1.在函數(shù)內(nèi)部定義的變量就是局部變量(作用范圍只能是當(dāng)前函數(shù)內(nèi)部)

2.在函數(shù)外部無法直接訪問局部變量

3.不同的函數(shù)中可以定義同名的局部變量

4.局部變量的生命周期:從定義變量時開始,到函數(shù)運行結(jié)束

全局變量

1.在所有函數(shù)外邊定義的變量就是全局變量

2.讓所有函數(shù)都能訪問到,可以作為函數(shù)通信的橋梁

3.一般情況下,為了和普通變量的區(qū)別,需要加上g_或gl_前綴

4.全局變量一般放在所有函數(shù)的最上面

5.在函數(shù)內(nèi)部修改全局變量,必須要加上global關(guān)鍵字,如果不加global只是定義了一個同名的局部變量

函數(shù)的多個返回值

python命名空間是什么

在Python中,所有的名字都存在一個空間中,它們在該空間中存在和被操作——這就是命名空間。它就像一個盒子,每一個變量名字都對應(yīng)裝著一個對象。當(dāng)查詢變量的時候,會從該盒子里面找到相應(yīng)的對象。

【定義】

名稱到對象的映射。命名空間是一個字典的實現(xiàn),鍵為變量名,值是變量對應(yīng)的值。各個命名空間是獨立沒有關(guān)系的,一個命名空間中不能有重名,但是不同的命名空間可以重名而沒有任何影響。

相關(guān)推薦:《Python教程》

【分類】

python程序執(zhí)行期間會有2個或3個活動的命名空間(函數(shù)調(diào)用時有3個,函數(shù)調(diào)用結(jié)束后2個)。按照變量定義的位置,可以劃分為以下3類:

Local,局部命名空間,每個函數(shù)所擁有的命名空間,記錄了函數(shù)中定義的所有變量,包括函數(shù)的入?yún)ⅰ?nèi)部定義的局部變量。

Global,全局命名空間,每個模塊加載執(zhí)行時創(chuàng)建的,記錄了模塊中定義的變量,包括模塊中定義的函數(shù)、類、其他導(dǎo)入的模塊、模塊級的變量與常量。

Built-in,python自帶的內(nèi)建命名空間,任何模塊均可以訪問,放著內(nèi)置的函數(shù)和異常。

【生命周期】

Local(局部命名空間)在函數(shù)被調(diào)用時才被創(chuàng)建,但函數(shù)返回結(jié)果或拋出異常時被刪除。(每一個遞歸函數(shù)都擁有自己的命名空間)。

Global(全局命名空間)在模塊被加載時創(chuàng)建,通常一直保留直到python解釋器退出。

Built-in(內(nèi)建命名空間)在python解釋器啟動時創(chuàng)建,一直保留直到解釋器退出。

各命名空間創(chuàng)建順序:python解釋器啟動 -創(chuàng)建內(nèi)建命名空間 - 加載模塊 - 創(chuàng)建全局命名空間 -函數(shù)被調(diào)用 -創(chuàng)建局部命名空間

各命名空間銷毀順序:函數(shù)調(diào)用結(jié)束 - 銷毀函數(shù)對應(yīng)的局部命名空間 - python虛擬機(解釋器)退出 -銷毀全局命名空間 -銷毀內(nèi)建命名空間

python解釋器加載階段會創(chuàng)建出內(nèi)建命名空間、模塊的全局命名空間,局部命名空間是在運行階段函數(shù)被調(diào)用時動態(tài)創(chuàng)建出來的,函數(shù)調(diào)用結(jié)束動態(tài)的銷毀的。

python局部變量與全局變量

(1)局部變量 是在 函數(shù)內(nèi)部定義的變量,只能在函數(shù)內(nèi)部使用

(2)函數(shù)執(zhí)行結(jié)束后,函數(shù)內(nèi)部的局部變量,會被系統(tǒng)回收

(3)不同的函數(shù),可以定義相同的名字的局部變量,不會互相影響

示例:

結(jié)果:

所謂生命周期就是變量從被創(chuàng)建到被系統(tǒng)回收的過程

(1)局部變量在函數(shù)執(zhí)行時才會被創(chuàng)建

(2)函數(shù)執(zhí)行結(jié)束后,局部變量被系統(tǒng)回收

(3)局部變量在生命周期內(nèi),可以用來存儲函數(shù)內(nèi)部臨時使用到的數(shù)據(jù)

示例:

結(jié)果:

示例:

結(jié)果:

示例:

結(jié)果:

(1)為了避免局部變量和全局變量出現(xiàn)混淆,在定義全局變量時,有些公司會有一些開發(fā)要求,例如:全局變量名前加上gl_或者g_的前綴,但不同公司可能不一致;

(2)建議全局變量的命名與局部變量的規(guī)則區(qū)分開;

文章題目:python函數(shù)生命周期 python 生命周期
分享路徑:http://muchs.cn/article36/dosccsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、App設(shè)計網(wǎng)站設(shè)計、ChatGPT、Google網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作