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