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

python裝飾器decorator介紹

 更新時間:2014年11月21日 10:45:06   投稿:junjie  
這篇文章主要介紹了python裝飾器decorator介紹,decorator設計模式允許動態(tài)地對現有的對象或函數包裝以至于修改現有的職責和行為,簡單地講用來動態(tài)地擴展現有的功能,需要的朋友可以參考下

一、裝飾器decorator

decorator設計模式允許動態(tài)地對現有的對象或函數包裝以至于修改現有的職責和行為,簡單地講用來動態(tài)地擴展現有的功能。其實也就是其他語言中的AOP的概念,將對象或函數的真正功能也其他輔助的功能的分離。

二、Python中的decorator

python中的decorator通常為輸入一個函數,經過裝飾后返回另一個函數。  比較常用的功能一般使用decorator來實現,例如python自帶的staticmethod和classmethod。

裝飾器有兩種形式:

復制代碼 代碼如下:

@A
def foo():
    pass

相當于:

復制代碼 代碼如下:

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

第二種為帶參數的:

復制代碼 代碼如下:

@A(arg)
def foo():
    pass

則相當于:

復制代碼 代碼如下:

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

可以看出第一種的裝飾器是個返回函數的函數,第二種的裝飾器是個返回函數的函數的函數。

python中的decorator可以多個同時使用,如下:

復制代碼 代碼如下:

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

三、Python中常用的decorator實例

decorator通常用來在執(zhí)行前進行權限認證,日志記錄,甚至修改傳入參數,或者在執(zhí)行后對返回結果進行預處理,甚至可以截斷函數的執(zhí)行等等。

實例1:

復制代碼 代碼如下:

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()函數的作用:調用經過裝飾的函數,相當于調用一個新函數,那查看函數參數,注釋,甚至函數名的時候,就只能看到裝飾器的相關信息,被包裝函數的信息被丟掉了。而wraps則可以幫你轉移這些信息,參見http://stackoverflow.com/questions/308999/what-does-functools-wraps-do

相關文章

最新評論

永泰县| 北安市| 康定县| 博罗县| 达州市| 济南市| 确山县| 栾川县| 资源县| 聊城市| 射阳县| 维西| 福鼎市| 东乌珠穆沁旗| 锦屏县| 葫芦岛市| 固原市| 九江市| 克什克腾旗| 且末县| 谷城县| 马关县| 汽车| 阳新县| 门源| 监利县| 武汉市| 星子县| 石柱| 滦南县| 彰化县| 古浪县| 磐安县| 商丘市| 庆安县| 遂宁市| 宜丰县| 如皋市| 黄平县| 固安县| 镇康县|