• 装饰器是AOP编程思想,给主体函数增加功能,又不让代码入侵到主体函数中,实现高内聚,低耦合。
  • 参数有两种,一种是功能函数带参数、另外一种是装饰器函数带参数,如果装饰功能部分代码也需要参数的话,可以在原来的两层函数外面再加一层,专门用来接收参数。
  • 下面我们通过两个小例子来学习
#功能函数带参数;
#实现一个功能函数为加法器,传入N位数字相加;装饰器-计算函数运行时间
import time
def show_time(f):
    def inner(*x):
        start = time.time()
        f(*x)
        end = time.time()
        print('speed %s'%(end-start))
    return inner

@show_time
def add(*a):
    sum = 0
    for i in a:
        sum += i
    print(sum)
    time.sleep(1)

add(1,2,3,5,6)
#装饰器函数带参数;
#实现一个功能函数为加法器,传入N位数字相加;装饰器-计算函数运行时间。另外增加一个打印日志的功能,实现功能输出日志,部分功能函数不需要输出日志
#bar调用的时候打印日志,add调用的时候不打印日志
import time
def logger(flag=''):
    def show_time(f):
        def inner(*x):
            start = time.time()
            print(start)
            f(*x)
            end = time.time()
            print(end)
            print('speed %s'%(end-start))
            if flag =='True':
                print('日志记录')
        return inner
    return show_time

@logger('True')       #bar = show_time(bar)
def bar():
    print('bar......')
    time.sleep(2)

@logger()
def add(*a):
    sum = 0
    for i in a:
        sum += i
    print(sum)
    time.sleep(1)

# add(1,2,3,5,6)
bar()

原文地址:http://www.cnblogs.com/xwltest/p/16837601.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性