(1)簡單數(shù)據(jù)類型變量無論是否與全局變量重名,僅在函數(shù)內(nèi)部創(chuàng)建和使用,函數(shù)退出后變量被釋放,如有全局同名變量,其值不變。
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),龍海企業(yè)網(wǎng)站建設(shè),龍海品牌網(wǎng)站建設(shè),網(wǎng)站定制,龍海網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,龍海網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
(2)簡單數(shù)據(jù)類型變量在用global保留字聲明后,作為全局變量使用,函數(shù)退出后該變量保留且值被函數(shù)改變。
(3)對(duì)于組合數(shù)據(jù)類型的全局變量,如果在函數(shù)內(nèi)部沒有被真實(shí)創(chuàng)建的同名變量,則函數(shù)內(nèi)部可以直接使用并修改全局變量的值。
(4)如果函數(shù)內(nèi)部真實(shí)創(chuàng)建了組合數(shù)據(jù)類型變量,無論是否有同名全局變量,函數(shù)僅對(duì)局部變量進(jìn)行操作,函數(shù)退出后局部變量被釋放,全局變量值不變。
*《python語言程序設(shè)計(jì)基礎(chǔ)》.高等教育出版社
def 函數(shù)名():? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ?函數(shù)體? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ?return? 返回值? ? ? ? ? ? ? ? ? ? ? ? ? ??
def 函數(shù)名(非可選參數(shù),可選參數(shù)):
???函數(shù)體?
return 返回值
def 函數(shù)名(參數(shù),*b):
? ? 函數(shù)體
? ? return 返回值
函數(shù)名 = lambda 參數(shù) : 表達(dá)式
例1:f = lambda x , y? :? x + y? ? ? ? ? ? ? ? ? ? ? ??
調(diào)用:f(6 + 8)? ? ?輸出:14? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
例2:?f = lambda : "沒有參數(shù)的lambda函數(shù)!"
調(diào)用:?print(f())? ? 輸出: 沒有參數(shù)的lambda函數(shù)!
變量的引用
變量和數(shù)據(jù)都是保存在內(nèi)存中的
變量和數(shù)據(jù)是分開存儲(chǔ)的
數(shù)據(jù)保存在內(nèi)存中某個(gè)位置,通過地址來標(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ù)類型,通過賦值語句,都會(huì)改變變量的引用
Hash函數(shù)只能接收不可變數(shù)據(jù)類型,字典的鍵也只能是不可變數(shù)據(jù)類型,字典的value值可以是任意數(shù)據(jù)類型
局部變量
1.在函數(shù)內(nèi)部定義的變量就是局部變量(作用范圍只能是當(dāng)前函數(shù)內(nèi)部)
2.在函數(shù)外部無法直接訪問局部變量
3.不同的函數(shù)中可以定義同名的局部變量
4.局部變量的生命周期:從定義變量時(shí)開始,到函數(shù)運(yùn)行結(jié)束
全局變量
1.在所有函數(shù)外邊定義的變量就是全局變量
2.讓所有函數(shù)都能訪問到,可以作為函數(shù)通信的橋梁
3.一般情況下,為了和普通變量的區(qū)別,需要加上g_或gl_前綴
4.全局變量一般放在所有函數(shù)的最上面
5.在函數(shù)內(nèi)部修改全局變量,必須要加上global關(guān)鍵字,如果不加global只是定義了一個(gè)同名的局部變量
函數(shù)的多個(gè)返回值
python中的變量定義是很靈活的,很容易搞混淆,特別是對(duì)于class的變量的定義,如何定義使用類里的變量是我們維護(hù)代碼和保證代碼穩(wěn)定性的關(guān)鍵。
枚舉了各種情況,沒有辦法全部枚舉,但大部分情況應(yīng)該都已經(jīng)包含了。
1. 類變量:能夠通過類名或者object的self來訪問到,在類的內(nèi)部和外部均可達(dá),比如class_var_1
2. 對(duì)象變量:可以通過對(duì)象的self來使用的變量,通過constructor一路走向去的的self初次被賦值的變量都會(huì)成為對(duì)象變量,比如object_var_1, object_var_2, object_var_3, object_var_4
3. 內(nèi)部變量:可以在函數(shù)中定義,并加上self前綴,在初次調(diào)用過定義的函數(shù)后,就可以在后面的對(duì)象的函數(shù)中被使用,比如internal_var_1
4. 局部變量:在函數(shù)內(nèi)部定義,并使用的變量,在使用完之后就會(huì)被回收對(duì)類及object不可見
5. 全局變量:定義在類或者函數(shù)外部,作用域在變量被定義之后的任意代碼段,比如:global_var_1
變量作用域:python可以直接查找名稱到對(duì)象的映射(命名空間)的部分。
python有built–in、global、enclosing、local這四種作用域
built–in:內(nèi)建作用域,包含了內(nèi)建的變量和關(guān)鍵字。
global:全局作用域,定義在所有函數(shù)外,當(dāng)前模塊(.py源文件)的全局變量。
enclosing:閉包函數(shù)外的函數(shù)(非局部也非全局),比如有一個(gè)函數(shù)a,a里有另一個(gè)函數(shù)b,對(duì)于b里的變量來說,a中的作用域就是enclosing。
local:局部作用域,腳本最內(nèi)層,比如函數(shù)里。