国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python中的裝飾器詳解

2020-02-23 00:39:30
字體:
來源:轉載
供稿:網友

在了解裝飾器的之前一定要先了解函數作為參數傳遞, 什么是函數內嵌,請參考我之前寫的博客函數簡介

因為在python里面,函數也是對象,也可以作為參數進行傳遞.python裝飾器本質也是一種特殊函數,它接收的參數是函數對象,然后動態地函數參數添加額外的功能,而不用修改原有的函數對象.python裝飾器傳入的參數是函數,返回的值也是函數!
python裝飾器思想有點類似設計模式的裝飾模式, 其意圖是動態地給函數對象添加額外的功能.比如像增加日志打印的功能,有點面向切面編程(AOP)的感覺.
裝飾器語法

以@開頭,接著后面跟著的是裝飾器的名字和可選的參數.裝飾器語法是一種語法糖.
格式如下
代碼如下:
@decomaker(deco_args)
    def foo(func_opt_args)

可以組合,等價于foo = g(f(foo))
代碼如下:
@g
@f
def foo():
    statement

簡單裝飾器

實例
代碼如下:
#!/usr/bin/python
def  deco(func):
    print 'start'
    func()
    print 'end'
    return func

@deco
def foo():
    print 'In foo'

foo()
foo()

輸出
代碼如下:
start
In foo
end
In foo
In foo

帶內嵌函數裝飾器

內嵌函數保證每次新函數都被調用.而且被裝飾的函數可以帶有參數.
實例
代碼如下:
def  deco(func):
    def _deco(x):    #該函數為內嵌函數
        print 'start'
        func(x)
        print 'end'
    return _deco

@deco
def foo(x):
    print 'In foo, get value is: %d' % x

foo(123456)

輸出:
代碼如下:
start
In foo, get value is: 123456
end

帶參數的裝飾器

需要自己返回以函數作為參數的裝飾器。換句話說,decomaker()用 deco_args 做了些事并返回函數對象,而該函數對象正是以 foo 作為其參數的裝飾器。簡單的說來:foo=decomaker(deco_args)(foo)

實例
代碼如下:
def deco(arg):
    def wrapper1(func):
        def _deco(x):
            print "get type is: ", arg
            func(x)
        return _deco

    def wrapper2(func):
        def _deco(x):
            func(x)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 诏安县| 宜丰县| 洛川县| 阿拉尔市| 横峰县| 邹平县| 县级市| 岢岚县| 合阳县| 平乡县| 甘谷县| 元谋县| 广南县| 自治县| 拜泉县| 科尔| 五华县| 木兰县| 基隆市| 西林县| 临安市| 吕梁市| 长子县| 阜南县| 历史| 赣州市| 美姑县| 仁怀市| 夹江县| 博湖县| 永仁县| 招远市| 芜湖县| 乌兰浩特市| 城口县| 丰县| 信丰县| 涟水县| 丰台区| 新泰市| 中山市|