Python 閉包與裝飾器

2021-08-25 05:32:56 字數 1086 閱讀 7150

在函式內部再定義乙個函式,並且內部這個函式用到了外邊函式的變數,那麼將內部函式以及用到的一些變數稱之為閉包。

# 兩個函式巢狀,外層函式返回內層函式的引用,  外層函式必須傳引數-->外層函式不傳參相當於只定義內層函式,沒有什麼用。

注意點:

由於閉包引用了外部函式的區域性變數,則外部函式的區域性變數沒有及時釋放,消耗記憶體。

裝飾器:

上例 @w1內部會執行一下操作: @函式名 是python的一種語法糖。

執行w1函式 ,並將 @w1 下面的函式作為w1函式的引數,即:@w1 等價於 w1(f1)所以,內部就會去執行:

def w1(func):

def inner():

# 驗證1

# 驗證2

# 驗證3

func()

return inner

@w1def f1():

print('f1')

w1的返回值

將執行完的w1函式返回值 賦值 給@w1下面的函式的函式名f1 即將w1的返回值再重新賦值給 f1,即:

新f1 = def inner(): 

#驗證 1

#驗證 2

#驗證 3

原來f1()

return inner

所以,以後業務部門想要執行 f1 函式時,就會執行 新f1 函式,在新f1 函式內部先執行驗證,再執行原來的f1函式,然後將原來f1 函式的返回值返回給了業務呼叫者 

如此一來, 即執行了驗證的功能,又執行了原來f1函式的內容,並將原f1函式返回值 返回給業務呼叫著

**執行順序:第1行(指向了2-5行)--> 第7 行-->第6行-->第5行--> 第11行-->3-->4-->8

python閉包與裝飾器

首先閉包函式我的理解是,乙個函式內可以巢狀定義乙個函式,並將巢狀定義的函式返回 如果不返回執行完函式物件也就銷毀了 巢狀函式可以接收外部函式的引數,不同引數就可以變更巢狀函式的功能,返回不同功能的巢狀函式物件。以下是閉包函式簡單示例,如果inner函式不接收outer的引數x也就沒有意義了,一定要返...

Python閉包與裝飾器

一.閉包 如果乙個內嵌函式中引用了外部函式中的變數 非全域性變數 那麼該內嵌函式稱之為閉包 也就是將組成函式的語句和這些語句的執行環境打包在一起時,得到的物件 閉包滿足的三個條件 1.必須是內嵌函式 2.外層函式返回值是內嵌函式 3.內嵌函式引用外層函式變數 def funx x def funy ...

python 閉包與裝飾器

如果乙個函式內部定義了乙個函式,我在稱外面這個函式為外函式,裡面的這個函式為內函式 如果內函式內部使用了外函式的臨時變數,並且外函式的返回值是內函式的引用,這種形式稱之為函式閉包 def test func def call func print func print return call fun...