python閉包,裝飾器 語法糖

2021-08-20 14:53:15 字數 1368 閱讀 1217

所謂閉包,就是將組成函式的語句和這些語句的執行環境打包在一起時,得到的物件:

裝飾器就是閉包,但裝飾器傳入的引數是函式:

閉包封存上下文,這一特性可以巧妙的被用於現有函式的包裝,從而為現有函式增加功能。而這就是裝飾器。

裝飾器的原則及構成:

原則: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 

doupi

(fn):

def

jiadoupi

():

print

("麻將豆皮10塊"

)

return

fn()+

10return

jiadoupi

def

xiangcai

(fnn):

def

jiaxiangcai

():

print

("麻將香菜5塊"

)

return

fnn()+

5return

jiaxiangcai

@xiangcai

@doupi

def

diguo

():

print

("底鍋50"

)

return

50print

(x)

@後的方法名就是python自帶的語法糖,為了簡寫也可以取到和裝飾器呼叫一樣的效果,這樣的程式看起來是不是就簡潔了很多

在設計模式中裝飾器就如同他的名字一樣把他裝飾起來

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提供了更為優雅的解決方案,只需要乙個 就能搞定。裝飾器函式需要單獨寫出...