1、python代碼運(yùn)行遇到函數(shù)時(shí) 從python解釋器開(kāi)始執(zhí)行之后,就在內(nèi)存中開(kāi)辟了一個(gè)空間 每當(dāng)遇到一個(gè)變量的時(shí)候,就把變量名和值之間的對(duì)應(yīng)關(guān)系記錄下來(lái)。 但是當(dāng)遇到函數(shù)定義的時(shí)候解釋器只是象征性的將函數(shù)名讀入內(nèi)存,表示知道這個(gè)函數(shù)的存在了,至于函數(shù)內(nèi)部的變量和邏輯解釋器根本不關(guān)心。 等執(zhí)行到函數(shù)調(diào)用的時(shí)候,python解釋器會(huì)再開(kāi)辟一塊內(nèi)存來(lái)存儲(chǔ)這個(gè)函數(shù)里的內(nèi)容,這個(gè)時(shí)候,才關(guān)注函數(shù)里面有哪些變量,而函數(shù)中的變量會(huì)存儲(chǔ)在新開(kāi)辟出來(lái)的內(nèi)存中。函數(shù)中的變量只能在函數(shù)的內(nèi)部使用,并且會(huì)隨著函數(shù)執(zhí)行完畢,這塊內(nèi)存中的所有內(nèi)容也會(huì)被清空。 2、命名空間
3、作用域 全局作用域:內(nèi)置命名空間和全局命名空間中的名字都屬于全局作用域 局部作用域:函數(shù)(局部命名空間中的名字屬于局部作用域) #查看局部作用域中的名字 locals() #查看全局作用域中的名字 globals() 4、global 對(duì)于不可變數(shù)據(jù)類(lèi)型,局部中可以獲得其值,但是不能修改 如果要修改,可以通過(guò)global關(guān)鍵字 a = 1 b = 2 def func(): global a a = 6 #合法 b = 4 #不合法操作 5、函數(shù)嵌套 def outer(): def inner(): print('---') inner() outer() 6、nonlocal 在嵌套的函數(shù)中,如果我們要修改上層函數(shù)的變量,通過(guò)上面global是做不到的,因?yàn)間lobal獲取的是全局中的那個(gè)變量,所以可以通過(guò)nonlocal來(lái)獲取(只能獲取最接近的那層,也就是上一層中的變量) a = 1 def outer1(): a = 2 def outer2(): a = 3 def inner(): nonlocal a a = 5 inner() outer2() outer1() #outer2中的a = 3將變成a = 5 7、函數(shù)名的本質(zhì)是內(nèi)存地址,可以作為容器元素,返回值,參數(shù) #函數(shù)名可以賦值 def func(): print('I am func') func2 = func func2() #實(shí)際上執(zhí)行的是func #函數(shù)名可以作為容器的元素 l = [func,fun2] for f in l: f() #函數(shù)名可以作為返回值 def ohyeah(f): f() return f 8、閉包 閉包就是內(nèi)層函數(shù)調(diào)用外層函數(shù)的變量 def outer(): a = 1 def inner(): print(a) #如果是閉包,調(diào)用__closure__將返回cell def outer(): a = 1 def inner(): print(a) print(inner.__closure__) outer() #閉包的用法就是在函數(shù)外部使用其內(nèi)部的函數(shù)。 #可以使外部函數(shù)的變量無(wú)需重復(fù)創(chuàng)建 def outer(): a = 1 def inner(): print(a) return inner out = outer() out() out() 9、三目運(yùn)算符 def max(a,b): return a if a>b else b 來(lái)源:http://www./content-1-114301.html |
|
來(lái)自: 印度阿三17 > 《開(kāi)發(fā)》