【Python语法】Python中的三种装饰器语法

一、装饰器不带参,被装饰函数不带参

from time import ctime 

def InsertTimestamp(f):
    def decorator():
        strInfo='[%s] %s() called'%(ctime(),f.__name__)
        print strInfo
        return f()
    return decorator

@InsertTimestamp
def func():
    pass

        内部定义的装饰器函数decorator()不带有参数,执行结果:
>>> from decorator import func
>>> func()
[Sat Jan  7 10:19:13 2017] func() called

二、装饰器不带参,被装饰函数带参

def InsertTimestamp2(f):
    def decorator(*args,**kwargs):
        strInfo='[%s] %s() called'%(ctime(),f.__name__)
        print strInfo
        return f(*args,**kwargs)
    return decorator

@InsertTimestamp2
def func2(seq=[1,2,3,4,5]):
    for var in seq:
        print var
        内部定义的装饰器函数decorator()用来接收被装置函数的参数,执行结果:
>>> from decorator import func2
>>> func2([1,2,3])
[Sat Jan  7 10:30:47 2017] func2() called
1
2
3

三、装饰器带参,被装饰函数可带可不带参

def InsertTimestampWithArgs(auth):
    def decorator_maker(f):
        def decorator(*args,**kwargs):
            strInfo='[%s] %s() called By %s'%(ctime(),f.__name__,auth)
            print strInfo
            return f(*args,**kwargs)
        return decorator
    return decorator_maker

@InsertTimestampWithArgs('Hyman')
def func3():
    pass
        装置器带参,相当于在接收被装饰函数作为参数的装饰器前面,再包装了一层带参的函数,执行结果如下:
>>> from decorator import func3
>>> func3()
[Sat Jan  7 10:45:29 2017] func3() called By Hyman


  Github 位置:
https://github.com/HymanLiuTS/PythonTs
克隆本项目:
git  clone git@github.com:HymanLiuTS/PythonTs.git
获取本文源代码:
git checkout PL01


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值