Python的decorator示例

Python装饰器详解
本文详细介绍了Python中的装饰器概念及应用实例,包括无参数装饰器、带参数装饰器及带参数的方法计时装饰器等。通过具体代码展示了如何使用装饰器来增强函数的功能。
#!-*-coding:utf-8-*-

import time

class MyDecorator(object):
    def __init__(self,f):
        self.f=f
        print("MyDecorator __init__")
        #f()
    def __call__(self):
        print("MyDecorator __call__ before")
        self.f()
        print("MyDecorator __call__ after ")

@MyDecorator
def aFunc():
    print("aFunc...")

class MyDecoratorWithArguments(object):
    def __init__(self,arg1,arg2,arg3):
        print('MyDecoratorWithArguments __init__')
        self.arg1=arg1
        self.arg2=arg2
        self.arg3=arg3

    def __call__(self,f):
        print("Inside __call__ of MyDecoratorWithArguments")
        def wrapper(*args):
            print("MyDecoratorWithArguments wrapper in")
            f(*args)
            print("MyDecoratorWithArguments wrapper out")
        return wrapper

@MyDecoratorWithArguments('hello','world',42)
def bFunc(a1,a2,a3,a4):
    print("bFunc ",a1,a2,a3,a4)

def timecount(f):
    print('Inside timecount')
    def wrapper():
        start=time.clock()
        print('timecount wrapper before ')
        f()
        print('timecount wrapper after')
        end=time.clock()
        print('Used : '+str(end-start))
    return wrapper

@timecount
def cFunc():
    print('cFunc ...')

def timecount_withargs(f):
    print('Inside timecount_withargs')
    def wrapper(*args):
        print('timecount_withargs wrapper before')
        f(*args)
        print('timecount_withargs wrapper after')
    return wrapper

@timecount_withargs
def dFunc(arg1,arg2,arg3,arg4):
    print('dFunc ',arg1,arg2,arg3,arg4)

if __name__=='__main__':
    print('*'*30)
    aFunc()
    print('*'*30)
    bFunc('say','hello','test','jack')
    print('-'*30)
    cFunc()
    print('-' * 30)
    dFunc('hello','world',['a','b',3,4],43)
    print('-' * 30)

 

转载于:https://my.oschina.net/shawnplaying/blog/719826

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值