python函式的閉包和裝飾器 閉包的簡單介紹

2021-10-10 07:38:05 字數 1590 閱讀 4395

1.巢狀函式

2.在內部函式引用了外部函式變數

3.函式外層返回內部函式的引用

# 函式巢狀

defouter()

: x=

1#######

definner()

:nonlocal x#閉包函式引用上層函式中的區域性變數

x+=10print

(x)return inner# 返回乙個內部函式的引用

#########

x=outer(

)# outer函式呼叫

print

(type

(x))x()

outer()(

)>>

<

class

'function'

>

1111

以@開頭,裝飾器是在函式呼叫之上的修飾器,在不改變專案原有**的基礎上,增加一些額外的功能

乙個裝飾器
# 定義乙個函式

def(func)

:def

inner()

:print

('s'

) func(

)print

('e'

)return inner

defun()

:#資料庫其他資源的釋放

print

('un...'

)def

test()

:print

('test...'

)func(

)test(

)>> s

func...es

test...

e

多個裝飾器

開始: 自上而下

結束: 自下而上

def

(func)

:def

inner()

:print

('*'*5

) func(

)print

('+'*5

)return inner

defball

(vn)

:def

inner()

:print

('*'*5

) vn(

)print

('+'*5

)return inner(

)def

func()

:#資料庫其他資源的釋放

print

('func...'

)@ball

deftest()

:print

('test...'

)>>

****

* test...

++++

+*****

func...

++++

+

python裝飾器,閉包函式

閉包函式 在函式a內部定義另外乙個函式b,之後b作為a的返回值直接被返回。此時函式b稱為a的閉包函式。在閉包函式b中如果使用a函式中定義的變數,此時a函式中被定義的變數會被臨時儲存,直到b函式呼叫結束時該變數才會被系統收回,從而實現a中變數延遲釋放 例如global 宣告的變數屬於全域性變數,此時在...

函式裝飾器和閉包

裝飾器是可呼叫的物件,其引數是另乙個函式 被裝飾的函式 裝飾器可能會處理被裝飾的函式,然後把它返回,或者將其替換成另乙個函式或可呼叫物件。裝飾器通常把函式替換成另乙個函式 defdeco func definner print running inner return inner deco def ...

閉包函式和裝飾器

目錄 二 閉包函式的應用 裝飾器閉包 閉是封閉 函式內部巢狀函式 包是包含,閉包是指該內部函式對外部作用域而非全域性作用域的變數的引用。為函式傳參的方式一 使用引數的形式def func x print x func 1 為函式傳參的方式二 包給函式def outter x x 2 def inne...