閉包
def func():
a=1def f1():
def foo():
print(a)
return foo
return f1
func()()()
ret=func() #f1函式複製給ret
a=ret() #foo函式複製給a
a()#呼叫 foo函式
#結果為1
#在巢狀函式內,使用非全域性變數(且不是本層變數)--就是閉包
def func():
a=def foo(price):
**g=sum(a)/len(a)
return **g #返回 平均值
return foo
ret=func()()
print(ret(15000))
#結果為:15000
print(ret.__closure__)#判斷是否是閉包
# 了解:
# print(ret.__code__.co_freevars) # 獲取的是自由變數
# print(ret.__code__.co_varnames) # 獲取的是區域性變數
#閉包的作用:
#保證資料的安全性
#裝飾器
開放封閉原則
裝飾器定義:在不改變原被裝飾的函式的源**以及呼叫方式下,為其新增額外的功能。
無引數版
有引數版
帶參裝飾器
多個裝飾器裝飾乙個函式
def inner1(*args,**kwargs):
print("這是裝飾器一開始")
func(*args,**kwargs)
print("這是裝飾器一結束")
return inner1
def inner2(*args,**kwargs):
print("這是裝飾器二開始")
func(*args,**kwargs)
print("這是裝飾器二結束")
return inner2
def func():
print("這是被裝飾的函式")
func()
# 結果:
這是裝飾器一開始
這是裝飾器二開始
這是被裝飾的函式
這是裝飾器二結束
這是裝飾器一結束
python規定多個裝飾器裝飾乙個函式的時候先執行離被裝飾的函式最近的裝飾器
python基礎之閉包函式與裝飾器
閉包函式 什麼是閉包函式 閉指的是定義在乙個函式內部 包指的是該函式包含對外部作用域 非全域性作用域 名字的引用 def counter n 0def incr nonlocal n x nn 1 return x return incr c counter print c 閉包的意義 返回的函式物...
python裝飾器,閉包函式
閉包函式 在函式a內部定義另外乙個函式b,之後b作為a的返回值直接被返回。此時函式b稱為a的閉包函式。在閉包函式b中如果使用a函式中定義的變數,此時a函式中被定義的變數會被臨時儲存,直到b函式呼叫結束時該變數才會被系統收回,從而實現a中變數延遲釋放 例如global 宣告的變數屬於全域性變數,此時在...
閉包函式與裝飾器
一 閉包函式 定義在函式內部的函式,並且該函式包含對外部函式作用域中名字的引用,該函式就稱為閉包函式。乙個持有外部環境變數的函式就是閉包,閉包 函式塊 定義函式時的環境。閉包函式是乙個能記住巢狀作用域變數值的函式,儘管作用域已經不存在 工廠函式定義了乙個外部的函式,這個函式簡單的生成並返回乙個內嵌的...