所謂閉包,就是將組成函式的語句和這些語句的執行環境打包在一起時,得到的物件:
裝飾器就是閉包,但裝飾器傳入的引數是函式:
閉包封存上下文,這一特性可以巧妙的被用於現有函式的包裝,從而為現有函式增加功能。而這就是裝飾器。
裝飾器的原則及構成:
原則:1、不能修改被裝飾函式的源**。
2、不能修改被裝飾函式的呼叫方式。
3、不能改變被裝飾函式的執行結果。
裝飾器對被裝飾函式是透明的。
在python中一切皆是物件,所以python中全部都是引用型別
因此函式可以像變數一樣被指向和傳遞。
def diguo():print("地鍋50")
return 50
def doupi(fn):
def jia():
print("豆皮10")
return fn()+10
return jia
def xiang(fnn):
def jia():
print("香菜")
return fnn()+5
return jia
aa=doupi(xiang(diguo))
print(aa())
但是這樣看起來貌似可讀性就比較差了,所以在python中實現了語法糖
def@後的方法名就是python自帶的語法糖,為了簡寫也可以取到和裝飾器呼叫一樣的效果,這樣的程式看起來是不是就簡潔了很多doupi
(fn):
def
jiadoupi
():
("麻將豆皮10塊"
)
return
fn()+
10return
jiadoupi
def
xiangcai
(fnn):
def
jiaxiangcai
():
("麻將香菜5塊"
)
return
fnn()+
5return
jiaxiangcai
@xiangcai
@doupi
def
diguo
():
("底鍋50"
)
return
50print
(x)
在設計模式中裝飾器就如同他的名字一樣把他裝飾起來
Python閉包 裝飾器
閉包 legb法則 所謂閉包,就是將組成函式的語句和這些語句的執行環境打包一起時得到的物件 閉包最重要的價值在於封裝上下文環境 下面有個列子來解釋下閉包 列 deffunx x print 開始 deffuny y returnx y print 結束 returnfuny x funx 4 pri...
python 閉包 裝飾器
2.閉包格式 return bar 返回內嵌函式 in test print in 3.使用原理 4.總結 二 裝飾器 2.格式 return test in 閉包函式返回內嵌函式 test aa test aa 裝飾 def aa 這兒如果有引數,test in也必須有一樣的引數,test in中...
Python語法糖 裝飾器
這裡用來記錄python各種甜得發膩的語法糖,以及各種變形用法。太初,神諭 pythonic import light,於是有了光。裝飾器是用來給函式增加新功能的,對於支援高階函式的語言,函式引數直接穿進去就好了。但是python提供了更為優雅的解決方案,只需要乙個 就能搞定。裝飾器函式需要單獨寫出...