-
順序:L->E->G->B查看全部
-
LEGB含義查看全部
-
LEGB: local enclosing global build-in查看全部
-
裝飾器查看全部
-
好查看全部
-
函數(shù)作用域 L E G B查看全部
-
LEGB查看全部
-
legb查看全部
-
#另一個(gè)裝飾器示例: def deco(func): def in_deco(): print '內(nèi)部裝飾' func() print '調(diào)用裝飾器' @deco def bar(): print 'in bar' # 到這里就運(yùn)行,運(yùn)行結(jié)果是:調(diào)用裝飾器。in_deco根本沒有調(diào)用,為什么呢?我們看一下運(yùn)行步驟 # 程序讀到@deco,把bar(),以deco的參數(shù)形式,裝入deco,程序預(yù)讀整個(gè)函數(shù),但不調(diào)用in_deco,所以運(yùn)行到 print '調(diào)用裝飾器'這句時(shí)打印,然后停止。 # 為什么只預(yù)讀,不調(diào)用in_deco呢? # 因?yàn)橥獠亢瘮?shù)漏寫了一個(gè)return in_deco,少了這個(gè),程序就無法返回到in_deco的入口,當(dāng)然也就無法運(yùn)行其內(nèi)部步驟了。 # 強(qiáng)行調(diào)用 bar(),結(jié)果會(huì)報(bào)錯(cuò):TypeError: 'NoneType' object is not callable,因?yàn)槁憆eturn in_deco,外置函數(shù)實(shí)際返回的是 return None。 # 下面糾正上例錯(cuò)誤 def deco(func): def in_deco(): print '01 內(nèi)部裝飾' func() print '02 調(diào)用裝飾器' return in_deco @deco def bar(): print '03 in bar' bar() #打印順序是 02、01、03。為什么這樣? # 第一步:因?yàn)锧deco,就預(yù)讀in_deco卻不運(yùn)行(因?yàn)榇藭r(shí)還不知道func要傳入什么),然后打印02,再返回in_deco入口處等待。 # 第二步,因?yàn)檎{(diào)用了bar(),啟動(dòng)in_deco,打印01。 # 第三步,遇到fun(),其實(shí)就是調(diào)用bar(),于是 print '03 in bar'查看全部
-
函數(shù)實(shí)質(zhì)與屬性 對(duì)象的計(jì)數(shù)值不為0時(shí),不會(huì)被回收查看全部
-
閉包概念查看全部
-
被函數(shù)調(diào)用的變量,其引用計(jì)數(shù)會(huì)在原來基礎(chǔ)上加1,需要時(shí)刻記住Python中一切皆對(duì)象,函數(shù)是對(duì)象,字面值也是對(duì)象,被函數(shù)調(diào)用的對(duì)象會(huì)成為函數(shù)的一個(gè)屬性連同函數(shù)本體組成一個(gè)閉包返回。查看全部
-
閉包內(nèi)的變量是函數(shù)的一個(gè)屬性,往往是在函數(shù)內(nèi)部定義一個(gè)函數(shù),然后返回這個(gè)函數(shù),返回的函數(shù)中自帶的屬性是某個(gè)變量的值。查看全部
-
LEGB查看全部
-
裝飾器就是在原有函數(shù)功能上進(jìn)行裝飾添加然后再將原函數(shù)和裝飾內(nèi)容結(jié)合進(jìn)行返回查看全部
舉報(bào)
0/150
提交
取消