Python 函数装饰器

from time import ctime,sleep


def tsfunc(func):
    def wrappedFunc(a):
        print  '[%s] %s() called, a= %s ' % (ctime(), func.__name__, a)

        return func()



    return  wrappedFunc

@tsfunc
def foo():
    print "doci daci"


foo(3)
sleep(2)
foo(4)

函数装饰器,就是修饰,修改一个函数,有点像AOP编程。

首先foo是一个函数 。

其实tsfunc也是另一个函数,
使用@符号时候,就相当于是调用了tsfunc 这个函数,同时参数就是foo。

可以看到tsfunc接受一个参数。
它的目的,是生成另一个函数。在tsfunc内部,名字叫wrappedFunc, 它返回了wrappedFunc。

所以应该定义wrappedFunc。

其实,现在foo已经不是foo了,foo传进了tsfunc中,返回的是wrappedFunc。
相当于
foo=tsfunc(foo),
在之后,foo的使用者, 要使用foo的时候,要看着wrappedFunc的参数来使用了。

tsfunc就像是 函数熔炉。重炼了。

当装饰器有参数时,相当于,熔炉,首先要重炼。所以生成的函数就又多了一层。如下所示。

from time import ctime,sleep


def tsfunc(arg):
    def ts_ts_func(func):
        def wrappedFunc(a):
            print  '[%s] %s() called, a= %s, arg=%s ' % (ctime(), func.__name__, a, arg)

            return func()



        return  wrappedFunc
    return ts_ts_func

@tsfunc("123")
def foo():
    print "doci daci"


foo(3)
sleep(2)
foo(4)

以前不理解装饰器, 慢慢练习写写,从简单,到复杂,慢慢就有感觉了。

参考 http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值