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...