码迷,mamicode.com
首页 > 编程语言 > 详细

python装饰器简介

时间:2015-03-11 19:48:49      阅读:208      评论:0      收藏:0      [点我收藏+]

标签: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():    #该函数为内嵌函数
        print ‘start‘
        func()
        print ‘end‘ 
    return _deco

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

foo()
foo()

输出:

start
In foo
end
start
In foo
end

带参数的装饰器

需要自己返回以函数作为参数的装饰器。换句话说,decomaker()用 deco_args 做了些事并返回
函数对象,而该函数对象正是以 foo 作为其参数的装饰器。简单的说来:foo = decomaker(deco_args)(foo)

实例

def  deco(arg):
    def wrapper(func):
        def _deco(x):
            print "get param is: ", x
            func(x)
        return _deco
    return wrapper  

@deco("type1")
def foo(x):
    print ‘In foo‘

foo(123)

输出

get param is:  123
In foo

python装饰器简介

标签:python   模式   装饰器   

原文地址:http://blog.csdn.net/csujiangyu/article/details/44201563

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!