欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python裝飾器decorator介紹

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

一、裝飾器decorator

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

二、Python中的decorator

python中的decorator通常為輸入一個函數(shù),經(jīng)過裝飾后返回另一個函數(shù)。  比較常用的功能一般使用decorator來實現(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)

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

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

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

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

三、Python中常用的decorator實例

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

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

相關(guān)文章

  • Opencv實現(xiàn)鼠標(biāo)事件與窗口互動功能過程

    Opencv實現(xiàn)鼠標(biāo)事件與窗口互動功能過程

    平時在做圖像處理demo或者研究測試算法時,經(jīng)常會用到imshow和鼠標(biāo)的交互,比如在顯示圖像的窗口上畫點、線、圓、矩形、多邊形等操作,故在此做出用法總結(jié)
    2022-12-12
  • django使用graphql的實例

    django使用graphql的實例

    這篇文章主要介紹了django使用graphql的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Python 異常處理Ⅳ過程圖解

    Python 異常處理Ⅳ過程圖解

    這篇文章主要介紹了Python 異常處理Ⅳ過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • Python 用turtle實現(xiàn)用正方形畫圓的例子

    Python 用turtle實現(xiàn)用正方形畫圓的例子

    今天小編就為大家分享一篇Python 用turtle實現(xiàn)用正方形畫圓的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 基于Python實現(xiàn)二維圖像雙線性插值

    基于Python實現(xiàn)二維圖像雙線性插值

    雙線性插值,又稱為雙線性內(nèi)插。在數(shù)學(xué)上,雙線性插值是有兩個變量的插值函數(shù)的線性插值擴(kuò)展,其核心思想是在兩個方向分別進(jìn)行一次線性插值。本文將用Python實現(xiàn)二維圖像雙線性插值,感興趣的可以了解下
    2022-06-06
  • Python中使用scapy模擬數(shù)據(jù)包實現(xiàn)arp攻擊、dns放大攻擊例子

    Python中使用scapy模擬數(shù)據(jù)包實現(xiàn)arp攻擊、dns放大攻擊例子

    這篇文章主要介紹了Python中使用scapy模擬數(shù)據(jù)包實現(xiàn)arp攻擊、dns放大攻擊例子,本文重點在于scapy有使用上,需要的朋友可以參考下
    2014-10-10
  • Python內(nèi)存優(yōu)化的七種技巧分享

    Python內(nèi)存優(yōu)化的七種技巧分享

    本文將重點介紹 Python 的內(nèi)置機(jī)制,并介紹 7 種原始但有效的內(nèi)存優(yōu)化技巧,掌握這些技巧將大大提高你的 Python 編程能力,文中通過代碼示例給大家講解的非常詳細(xì),感興趣的小伙伴跟著小編一起來學(xué)習(xí)吧
    2024-02-02
  • python OpenCV的imread不能讀取中文路徑問題及解決

    python OpenCV的imread不能讀取中文路徑問題及解決

    這篇文章主要介紹了python OpenCV的imread不能讀取中文路徑問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python 讀取指定文件夾下的所有圖像方法

    Python 讀取指定文件夾下的所有圖像方法

    下面小編就為大家分享一篇Python 讀取指定文件夾下的所有圖像方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python實現(xiàn)凱撒密碼、凱撒加解密算法

    python實現(xiàn)凱撒密碼、凱撒加解密算法

    這篇文章主要介紹了python語言編程實現(xiàn)凱撒密碼、凱撒加解密算法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06

最新評論