python高级编程——Decorator(修饰器)用法

 

一、基本应用:

 

在python里方法也是对象,它可以作为参数传递。

现在有个方法foo,我希望在它运行前后做些事情,那就可以使用decorator了。

 

# coding=utf-8

# 原方法
def foo():
    print 'running'

# 修饰方法
def outer(some_func):
    def inner():
        print "before some_func"
        some_func()
        print "after some_func"
    return inner

# 修饰foo方法
decorated = outer(foo) # 2

# 运行修饰后的方法
decorated()
输出:
before some_func
running
after some_func

可以看到我们在没有修改原方法foo()的前提下,修改了foo()运行之前和运行之后的行为。

 

二、使用@符号简化修饰器应用 

# coding=utf-8

# 修饰方法
def NewFoo(some_func):
    def inner():
        print "before some_func"
        some_func()
        print "after some_func"
    return inner

# 原方法
@NewFoo
def foo():
    print 'running'

# 运行修饰后的方法
foo()

修改后的代码更清晰简单了,而且foo方法名称都没有改变,行为就改变了。

这里注意:@NewFoo要与修饰方法名称一样,否则不会生效。通过修饰器,python实际调用是这样的:

foo = NewFoo(foo)
foo()

 

 

 

三、一个我使用到的案例

假设我们的开发code有多个分支,但测试代码希望只有一份,那就可以在测试代码上定义@dev_branchA_run_only、@dev_branchB_not_run这样的标记来适应多个分支的测试case。

 

 

参考:

http://simeonfranklin.com/blog/2012/jul/1/python-decorators-in-12-steps/

http://coolshell.cn/articles/11265.html

http://www.imooc.com/article/1257

 

--end

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值