最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python裝飾器decorator介紹

 更新時(shí)間:2014年11月21日 10:45:06   投稿:junjie  
這篇文章主要介紹了python裝飾器decorator介紹,decorator設(shè)計(jì)模式允許動(dòng)態(tài)地對(duì)現(xiàn)有的對(duì)象或函數(shù)包裝以至于修改現(xiàn)有的職責(zé)和行為,簡(jiǎn)單地講用來(lái)動(dòng)態(tài)地?cái)U(kuò)展現(xiàn)有的功能,需要的朋友可以參考下

一、裝飾器decorator

decorator設(shè)計(jì)模式允許動(dòng)態(tài)地對(duì)現(xiàn)有的對(duì)象或函數(shù)包裝以至于修改現(xiàn)有的職責(zé)和行為,簡(jiǎn)單地講用來(lái)動(dòng)態(tài)地?cái)U(kuò)展現(xiàn)有的功能。其實(shí)也就是其他語(yǔ)言中的AOP的概念,將對(duì)象或函數(shù)的真正功能也其他輔助的功能的分離。

二、Python中的decorator

python中的decorator通常為輸入一個(gè)函數(shù),經(jīng)過(guò)裝飾后返回另一個(gè)函數(shù)。  比較常用的功能一般使用decorator來(lái)實(shí)現(xiàn),例如python自帶的staticmethod和classmethod。

裝飾器有兩種形式:

復(fù)制代碼 代碼如下:

@A
def foo():
    pass

相當(dāng)于:

復(fù)制代碼 代碼如下:

def foo():
    pass
foo = A(foo)

第二種為帶參數(shù)的:

復(fù)制代碼 代碼如下:

@A(arg)
def foo():
    pass

則相當(dāng)于:

復(fù)制代碼 代碼如下:

def foo():
    pass
foo = A(arg)(foo)

可以看出第一種的裝飾器是個(gè)返回函數(shù)的函數(shù),第二種的裝飾器是個(gè)返回函數(shù)的函數(shù)的函數(shù)。

python中的decorator可以多個(gè)同時(shí)使用,如下:

復(fù)制代碼 代碼如下:

@A
@B
@C
def f (): pass
   
# it is same as below
def f(): pass
f = A(B(C(f)))

三、Python中常用的decorator實(shí)例

decorator通常用來(lái)在執(zhí)行前進(jìn)行權(quán)限認(rèn)證,日志記錄,甚至修改傳入?yún)?shù),或者在執(zhí)行后對(duì)返回結(jié)果進(jìn)行預(yù)處理,甚至可以截?cái)嗪瘮?shù)的執(zhí)行等等。

實(shí)例1:

復(fù)制代碼 代碼如下:

from functools import wraps
def logged(func):
    @wraps(func)
    def with_logging(*args, **kwargs):
        print (func.__name__() + " was called")
        return func(*args, **kwargs)
    return with_logging

@logged
def f(x):
   """does some math"""
   return x + x * x

print (f.__name__)  # prints 'f'
print (f.__doc__)   # prints 'does some math'

注意functools.wraps()函數(shù)的作用:調(diào)用經(jīng)過(guò)裝飾的函數(shù),相當(dāng)于調(diào)用一個(gè)新函數(shù),那查看函數(shù)參數(shù),注釋,甚至函數(shù)名的時(shí)候,就只能看到裝飾器的相關(guān)信息,被包裝函數(shù)的信息被丟掉了。而wraps則可以幫你轉(zhuǎn)移這些信息,參見(jiàn)http://stackoverflow.com/questions/308999/what-does-functools-wraps-do

相關(guān)文章

最新評(píng)論

鹿邑县| 建宁县| 洪湖市| 万全县| 永济市| 禄劝| 厦门市| 陆良县| 景东| 环江| 太仆寺旗| 福清市| 临沭县| 舞阳县| 牙克石市| 南康市| 永春县| 孝义市| 综艺| 澎湖县| 左贡县| 蓝山县| 磴口县| 武强县| 当阳市| 铜川市| 宁强县| 延吉市| 芮城县| 盐亭县| 仁布县| 阳朔县| 苗栗县| 临湘市| 平舆县| 那曲县| 奇台县| 黔西| 萨嘎县| 吕梁市| 舟曲县|