變量的引用
成都創(chuàng)新互聯(lián)公司是網(wǎng)站建設(shè)技術(shù)企業(yè),為成都企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計,網(wǎng)站設(shè)計,網(wǎng)站制作,網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。十載品質(zhì),值得信賴!
變量和數(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ù)參數(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ù)運(yùn)行結(jié)束
全局變量
1.在所有函數(shù)外邊定義的變量就是全局變量
2.讓所有函數(shù)都能訪問到,可以作為函數(shù)通信的橋梁
3.一般情況下,為了和普通變量的區(qū)別,需要加上g_或gl_前綴
4.全局變量一般放在所有函數(shù)的最上面
5.在函數(shù)內(nèi)部修改全局變量,必須要加上global關(guān)鍵字,如果不加global只是定義了一個同名的局部變量
函數(shù)的多個返回值
函數(shù)中定義的變量只能在函數(shù)體重起作用,Python在函數(shù)中定義的變量只能在該函數(shù)體中才可以起作用,只要出了這個函數(shù),那么其他的地方就無法訪問這個變量,因?yàn)樵撟兞康淖饔糜蛑辉谶@個函數(shù)中,所以只在本函數(shù)體內(nèi)有效。
因?yàn)槎x了局部變量只能在其被聲明的函數(shù)內(nèi)部訪問,要想在程序的全域進(jìn)行訪問只能通過定義全局變量的方法進(jìn)行實(shí)現(xiàn),這些只要在程序控制范圍內(nèi)都可以調(diào)用。
一般情況下變量就分為這兩大類,一類是全局變量,一類是局部變量。
Python常用的控制語句:
1、if語句,當(dāng)條件成立時運(yùn)行語句塊。經(jīng)常與else,elif(相當(dāng)于else if)配合使用、for語句,遍歷列表、字符串、字典、集合等迭代器,依次處理迭代器中的每個元素。
2、while語句,當(dāng)條件為真時,循環(huán)運(yùn)行語句塊、try語句,與except,finally配合使用處理在程序運(yùn)行中出現(xiàn)的異常情況、class語句,用于定義類型。
3、def語句,用于定義函數(shù)和類型的方法、pass語句,表示此行為空,不運(yùn)行任何操作。
4、from…?import語句,從包導(dǎo)入模塊或從模塊導(dǎo)入某個對象、import … as語句,將導(dǎo)入的對象賦值給一個變量、in語句,判斷一個對象是否在一個字符串、列表、元組里。
Python代碼編寫注意:
開發(fā)者有意讓違反了縮進(jìn)規(guī)則的程序不能通過編譯,所以在進(jìn)行Python代碼的書寫時一定要注意代碼的縮進(jìn)。
以上內(nèi)容參考:百度百科-Python
(1)簡單數(shù)據(jù)類型變量無論是否與全局變量重名,僅在函數(shù)內(nèi)部創(chuàng)建和使用,函數(shù)退出后變量被釋放,如有全局同名變量,其值不變。
(2)簡單數(shù)據(jù)類型變量在用global保留字聲明后,作為全局變量使用,函數(shù)退出后該變量保留且值被函數(shù)改變。
(3)對于組合數(shù)據(jù)類型的全局變量,如果在函數(shù)內(nèi)部沒有被真實(shí)創(chuàng)建的同名變量,則函數(shù)內(nèi)部可以直接使用并修改全局變量的值。
(4)如果函數(shù)內(nèi)部真實(shí)創(chuàng)建了組合數(shù)據(jù)類型變量,無論是否有同名全局變量,函數(shù)僅對局部變量進(jìn)行操作,函數(shù)退出后局部變量被釋放,全局變量值不變。
*《python語言程序設(shè)計基礎(chǔ)》.高等教育出版社
類體內(nèi),所有函數(shù)外定義。
所有實(shí)例對象共享。
只有通過類名調(diào)用時才能修改,通過實(shí)例調(diào)用時無法修改。
假設(shè)某類變量名為“name",如果用該類的某個實(shí)例x來為name賦值:x.name = 'xxx',實(shí)質(zhì)是為該實(shí)例新定義了一個變量name。且之后無法再通過該實(shí)例調(diào)用類變量name了。因?yàn)槭褂脤?shí)例調(diào)用某名為“xxx”變量時,若該實(shí)例沒有名為“xxx”的實(shí)例變量,則會去調(diào)用名為“xxx”的類變量;若有該名稱的實(shí)例變量,則該實(shí)例無法再直接調(diào)用該名稱對應(yīng)的類變量。因此也不推薦通過實(shí)例來調(diào)用類變量。
即:通過類實(shí)例修改類變量的值時,實(shí)際是在定義新的與類變量同名的實(shí)例變量。
類體內(nèi),某函數(shù)(一般是__ init __ ())內(nèi)定義。 “self.變量名”
因?yàn)槭菍儆谀硞€具體實(shí)例的,因此不能通過類名訪問。
如果不在__ init __ () 中調(diào)用(該函數(shù)會在創(chuàng)建實(shí)例時自動調(diào)用一次),則只有調(diào)用該實(shí)例中定義目標(biāo)實(shí)例變量的那個函數(shù)后,才能使用目標(biāo)實(shí)例變量。因此最好在__ init __ () 中定義實(shí)例變量。
類體內(nèi),某函數(shù)內(nèi)定義。
直接在函數(shù)內(nèi)用“變量名=值”的方式進(jìn)行定義。
函數(shù)執(zhí)行完畢后,該局部變量即被銷毀。
函數(shù)是組織好,可重復(fù)使用的,用來實(shí)現(xiàn)相關(guān)功能的代碼段
函數(shù)提高了代碼的重復(fù)利用率和應(yīng)用的模塊性。
除Python自帶的函數(shù)之外,也可以自己創(chuàng)建函數(shù),叫做自定義函數(shù)
語法:
函數(shù)代碼塊以 def 開頭
參數(shù)為 輸入值 ,放于函數(shù)名后口號里面,
函數(shù)內(nèi)容以冒號:開始,函數(shù)體縮進(jìn), return 返回 輸出值
函數(shù)調(diào)用使用關(guān)鍵字參數(shù)來確定傳入的參數(shù)值,此時,如果多個函數(shù)則不需要按照指定順序。
在定義函數(shù)時,指定參數(shù)默認(rèn)值。調(diào)用時如果不傳入?yún)?shù),則使用默認(rèn)值
不定長部分如果沒有指定參數(shù),傳入是一個空元組
加了 兩個星號 ** 的參數(shù)會以字典的形式導(dǎo)入
/ 用來指明函數(shù)形參必須使用指定位置參數(shù),不能使用關(guān)鍵字參數(shù)的形式。
3.8版本之后的才能使用
不使用 def 定義函數(shù),沒有函數(shù)名
lamdba主體時一個表達(dá)式,而不是代碼塊,函數(shù)體比def簡單很多
定義在函數(shù)內(nèi)部的為局部變量,僅能在函數(shù)內(nèi)部使用
定義在函數(shù)外部的為全局變量,可在全局使用
模塊是將包含所有定義的函數(shù)和變量的文件,一般將同類功能的函數(shù)組和在一起稱為模塊。
模塊需要導(dǎo)入后,在調(diào)用相應(yīng)函數(shù)進(jìn)行使用
模塊導(dǎo)入的方法:
從模塊中導(dǎo)入一個指定的部分
把一個模塊的所有內(nèi)容全都導(dǎo)入