裝飾器,閉包。

2021-09-25 09:17:02 字數 843 閱讀 9037

#外部函式outter

def outter():

a = 10 # a為inner的外部作用域

#內部函式inner

def inner():

print(a)

return inner

outter()() # 直接呼叫inner() # 輸出為10

如果在內部函式inner中,有對外部作用域的乙個引用(a=10),那麼內部函式就是乙個閉包。在使用時,可以直接呼叫內部函式,內部函式也照樣可以使用外部函式的變數。

作用:儲存函式的狀態資訊,使函式的區域性變數資訊依然可以儲存下來。在爬蟲中應用,可閉包將爬取資料儲存起來。

理解了閉包,就好理解裝飾器了。因為裝飾器其實是用閉包來實現的。

def handle_exception(fn):

def _decorate():

print 'before'

fn()

print 'after'

return _decorate

# @為裝飾器:其等同於 hello =handle_exception(fn)

@handle_exception

def hello():

print 'hello'

if __name__ == '__main__':

print(hello())

返回結果:test python decorate_sample.py

before

hello

after

none

裝飾器能大大提高**的重用性。

原文:

裝飾器與閉包

閉包 內層函式呼叫外層函式的引數,並且返回內層函式,叫做閉包。裝飾器 是裝飾器的符號 裝飾器是對閉包的一種利用,內層函式呼叫外層函式的引數,並且返回內層函式,叫做閉包,把呼叫的引數,換成函式,就是裝飾器,因為python中,函式也是當做物件,從而有裝飾器這一種特殊的用法。有引數的裝飾器就是在外面一層...

閉包和裝飾器

叫什麼 閉包有什麼用 跟函式相對可以把外層函式的引數保留下來 怎麼寫 def 外層函式 引數 def 內層函式 pass return 內層函式 心法 兩個函式的巢狀,外層函式返回內層函式的引用,外層函式必須有引數func 裝飾前的test,call fun 三者引數一樣的 def set fun ...

閉包和裝飾器

閉包 兩個函式的巢狀,外部函式返回內部函式的引用,外部函式一定有引數 def 外部函式 引數 def 內部函式 pass return 內部函式 他跟函式之間的區別 1.格式兩個函式巢狀 2.閉包外部函式的引數可以在記憶體中保持 裝飾器是什麼 閉包加 裝飾器的作用 在不改變原先的函式值跟呼叫的方式,...