|
1、python代碼運行遇到函數(shù)時 從python解釋器開始執(zhí)行之后,就在內(nèi)存中開辟了一個空間 每當遇到一個變量的時候,就把變量名和值之間的對應(yīng)關(guān)系記錄下來。 但是當遇到函數(shù)定義的時候解釋器只是象征性的將函數(shù)名讀入內(nèi)存,表示知道這個函數(shù)的存在了,至于函數(shù)內(nèi)部的變量和邏輯解釋器根本不關(guān)心。 等執(zhí)行到函數(shù)調(diào)用的時候,python解釋器會再開辟一塊內(nèi)存來存儲這個函數(shù)里的內(nèi)容,這個時候,才關(guān)注函數(shù)里面有哪些變量,而函數(shù)中的變量會存儲在新開辟出來的內(nèi)存中。函數(shù)中的變量只能在函數(shù)的內(nèi)部使用,并且會隨著函數(shù)執(zhí)行完畢,這塊內(nèi)存中的所有內(nèi)容也會被清空。 2、命名空間
3、作用域 全局作用域:內(nèi)置命名空間和全局命名空間中的名字都屬于全局作用域 局部作用域:函數(shù)(局部命名空間中的名字屬于局部作用域) #查看局部作用域中的名字 locals() #查看全局作用域中的名字 globals() 4、global 對于不可變數(shù)據(jù)類型,局部中可以獲得其值,但是不能修改
如果要修改,可以通過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ù)的變量,通過上面global是做不到的,因為global獲取的是全局中的那個變量,所以可以通過nonlocal來獲?。ㄖ荒塬@取最接近的那層,也就是上一層中的變量)
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() #實際上執(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ù)的變量無需重復(fù)創(chuàng)建
def outer():
a = 1
def inner():
print(a)
return inner
out = outer()
out()
out()
9、三目運算符 def max(a,b):
return a if a>b else b
來源:http://www./content-1-114301.html |
|
|