zoukankan      html  css  js  c++  java
  • python练习1

    #要求设计一个装饰器打印函数的执行的时间
    #使用返回函数,但是我现在对返回函数还是有点朦朦胧胧的
    #看了别人的代码,才勉勉强强的写出来
    #这里的关键是使函数在装饰器中执行一次,然后再返回这个函数
    #之前对在返回函数中能不能执行函数比较模糊
    import functools,time
    def metric(fn):
        def wrapper(*args, **kw):
            ts = time.time()
            f2 = fn(*args, **kw)#f2保存执行结果
            print('%s executed in %s ms' % (fn.__name__, time.time() - ts ))
            return f2
        return wrapper
    
    #在函数调用前输出begin call,调用结束输出end call
    #返回的函数只有被调用时才会执行
    def log(func):
        def wrapper(*args,**kw):
            print('begin call %s'%func.__name__)
            f = func(*args,**kw)#f保存执行结果
            print('end call %s'%func.__name__)
            return f
        return wrapper
    # 测试
    @metric
    def fast(x, y):
        time.sleep(0.0012)
        return x + y;
    
    @metric
    def slow(x, y, z):
        time.sleep(0.1234)
        return x * y * z;
    
    f = fast(11, 22)
    s = slow(11, 22, 33)
    if f != 33:
        print('测试失败!')
    elif s != 7986:
        print('测试失败!')
    else:
        print('测试成功')
    
    #定义一个装饰器,既支持log,又支持log(text)
    def log(text):
        if isinstance(text, str):
            def decorator(func):
                def wrapper(*args, **kw):
                    print('%s %s():' % (text, func.__name__))
                    return func(*args, **kw)
                return wrapper
            return decorator
        else:
            def wrapper(*args,**kw):
                return text(*args,**kw)
            return wrapper
    
    
    @log  # hello = log(hello)
    def hello1():
        print('hello world 1')
    
    
    @log('test')
    def hello2():
        print('hello world 2')
    
    
    hello1()
    hello2()
  • 相关阅读:
    nginx 指令之 try_files
    java tomcat jvm优化
    使用phpexcel上传下载excel文件
    路由器数据统计SQL脚本
    微信公众平台开发(122) 获取微信会员卡用户姓名和手机号
    微信会员卡积分规则
    IP白名单
    关于公众平台接口不再支持HTTP方式调用的公告
    微信公众号特异功能列表
    微信小程序 TOP100 榜单
  • 原文地址:https://www.cnblogs.com/MalcolmMeng/p/8442963.html
Copyright © 2011-2022 走看看