python 装饰器的使用

学习python的装饰器,按照看的教程自己操作一遍

#coding=utf-8


def auth(func):
    def inner(*args,**kw):
        print 'first run %s!'%func.__name__
        funcs = func(*args, **kw)
        print 'after run %s!'%func.__name__
        return funcs
    return inner


@auth
def f1( *args,**kw):
    print 'run f1 %s' %(args)


@auth
def f2( *args,**kw):
    #print 'run f1 %s' %(args)
    return args


f1(['sfa','saffsa'])
print f2(['f2'])

#带参数的装饰器,原理 两层调用
def auth_param(param):
    def outter(func):
        def inner(*args,**kwargs):
            print 'first run %s brefore %s!'%(func.__name__,param)
            funcs = func(*args, **kwargs)
            print 'after run %s brefore %s!'%(func.__name__,param)
            return funcs
        return inner
    return outter

@auth
def f3(*args,**kwargs):
    out = 'run f3 with %s'%args
    return out


@auth_param('decorate_params')
def f4(*args,**kwargs):
    out = 'run f4 with %s'%args
    return out

print f3('f3')
print f4('f4')

#多层装饰器,一层一层执行
@auth
@auth_param('decorate_params')
def f5(*args,**kwargs):
    out = 'run f5 with %s'%args
    return out

print f5('f5')


#看看更拽的装饰器
def before(request,kargs):
    print 'brfore'

def after(request,kargs):
    print 'after'

def deco_fun(before_func, after_func):
    def outer(func):
        def inner(request, kargs):
            before_resut = before_func(request,kargs)
            if before_resut !=None:
                return before_resut

            main_result = func(request,kargs)
            after_result = after_func(request,kargs)
            if after_result!=None:
                return after_result
            return main_result
        return inner
    return outer

@deco_fun(before, after)
def f6(request, kargs):
    return request

print f6('f6','haha')

 下面是输出结果 

/System/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6 "/Applications/PyCharm CE.app/Contents/helpers/pydev/pydevd.py" --multiproc --qt-support --client 127.0.0.1 --port 59076 --file /Users/liuchangke/study-software/zhihuSpider/decorate_test.py
pydev debugger: process 3610 is connecting


Connected to pydev debugger (build 143.1919)
first run f1!
run f1 ['sfa', 'saffsa']
after run f1!
first run f2!
after run f2!
(['f2'],)
first run f3!
after run f3!
run f3 with f3
first run f4 brefore decorate_params!
after run f4 brefore decorate_params!
run f4 with f4
first run inner!
first run f5 brefore decorate_params!
after run f5 brefore decorate_params!
after run inner!
run f5 with f5
brfore
after
f6


Process finished with exit code 0

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值