-
L即函數(shù)內(nèi)部的,如func內(nèi)部的passline
E:in_func
G:第1行的passline為全局變量
B:Max中的max
查看全部 -
legb:
查看全部 -
閉包函數(shù):內(nèi)部函數(shù)中對enclosing作用域的變量進行引用
查看全部 -
#裝飾器,結(jié)合上一節(jié)課的例子學(xué)習(xí)。
1:裝飾器用來裝飾函數(shù);
2:返回一個函數(shù)對象;
3:被裝飾函數(shù)標識符指向返回的函數(shù)對象;
4:語法糖 @deco
查看全部 -
為什么要:
?def dec(func):
? ? return in_dec
可以理解成只是在函數(shù)內(nèi)部定義了內(nèi)部函數(shù)但不一定會調(diào)用這個函數(shù),而如果是return in_dec就肯定是調(diào)用了這個函數(shù)了。
查看全部 -
想在閉包中調(diào)用函數(shù):記住函數(shù)也是一個對象,所以在return時調(diào)用這個函數(shù)即可。
接下來的賦值什么的完全一樣。
查看全部 -
在C,中好像也干過這事,不過當(dāng)時應(yīng)該是傳入了兩個變量進行比較
查看全部 -
#coding:utf-8
def fun_100(val):
? ? passline = 60
? ? if val >= passline :
? ? ? ? print "Pass : %d" %val
? ? else :
? ? ? ? print "Failed"
def fun_150(val):
? ? passline = 90
? ? if val >= passline :
? ? ? ? print "Pass : %d" %val
? ? else :
? ? ? ? print "Failed"
fun_100(89)
fun_150(89)
#閉包的使用
def set_passline(passline):
? ? def cmp(val):#(passline,val)
? ? ? ? if val >= passline:
? ? ? ? ? ? print "Pass : %d" %val
? ? ? ? else :
? ? ? ? ? ? print "Failed"
? ? return cmp #如果不返回函數(shù),就無法將內(nèi)部函數(shù)保存下來,那么一次引用之后就沒有用了
f_100 = set_passline(60)
f_150 = set_passline(90)
f_100(89)
f_150(89)
查看全部 -
#coding:utf-8
passline = 60
def func(val):
? ? print ('%x'%id(val))
? ? if val >= passline:
? ? ? ? print ('pass')
? ? else :
? ? ? ? print('failed')
? ? def in_func(): #(val,),閉包的含義,將函數(shù)內(nèi)部變量直接添加到內(nèi)部函數(shù)中
? ? ? ? print(val)
? ? in_func()
? ? return in_func
f = func(89)
#f() #==in_fun()
#pass?
#89 ?in_fun()
#89 ?f()
print (f.__closure__)
查看全部 -
def cmp(val): ?#將我們的passline添加到我們set_passline()的屬性中,稱之為閉包。
查看全部 -
如果我們引用函數(shù)enclosing中的變量,那么當(dāng)我們再次查找這個變量的時候,我們就不能在代碼中找到它,而是在函數(shù)屬性中依次有它的位置。
這里所說的再次查找是指在in_func()中打印時去查找它?還是指在f()中去查找它?
查看全部 -
函數(shù)返回值的重要性質(zhì):它在產(chǎn)生之后會不會被回收
如果你返回的是函數(shù),變量f就是接受這個返回函數(shù)的函數(shù),調(diào)用時就應(yīng)該加上參數(shù),如果有你定義時沒有參數(shù)就是直接加上括號。
def in_func():
? ? print (val)
查看全部 -
閉包作用
1、封裝
2、代碼復(fù)用
查看全部 -
#coding:utf-8
passline = 60
def func(val):
? ? if val >= passline:
? ? ? ? print ('pass')
? ? else :
? ? ? ? print('failed')
? ? def in_func():
? ? ? ? print(val)
? ? in_func()
? ? return in_func
?f = func(89) #函數(shù)func()返回值是一個函數(shù)
f() #in_func ,由于in_func()作為一個返回值存在(引用值不為),所以他不會變成0,但是val只是作為函數(shù)內(nèi)部定義的變量,所以函數(shù)調(diào)用完會回收回去。
查看全部 -
函數(shù)實質(zhì)與屬性:
1、函數(shù)是一個對象
2、函數(shù)執(zhí)行完成后內(nèi)部變量回收
3、函數(shù)屬性
4、函數(shù)返回值
查看全部 -
?作用域的分級
查看全部 -
函數(shù)作用域:L>E>G>B(計算機查找順序)
L:local 函數(shù)內(nèi)部作用域
E:enclosing 函數(shù)內(nèi)部與內(nèi)嵌函數(shù)之間(即閉包)
G:global 全局作用域
B:build-in 內(nèi)置作用域
查看全部 -
裝飾器的實質(zhì)就是對閉包的使用
查看全部 -
閉包就是內(nèi)置函數(shù)對enclosing作用域變量的使用,它會將我們這個變量放到closure這個屬性中,內(nèi)部函數(shù)進行處理時,可以拿過來直接使用
查看全部 -
函數(shù)的實質(zhì)
查看全部 -
LEGB:
查看全部 -
課程主要內(nèi)容
查看全部 -
LEGB: L>E>G>B 查找順序優(yōu)先級?
L:local函數(shù)內(nèi)部作用域,是最底層的單個函數(shù)里面;?
E:enclosing函數(shù)內(nèi)部與內(nèi)嵌函數(shù)之間,是有內(nèi)部函數(shù)的函數(shù)里面;?
G:global 全局作用域,是一個.py文件中;
?B:build-in內(nèi)置作用域,比如:tuple,list,元組。是所有.py文件中。
查看全部 -
查看全部
舉報