zoukankan      html  css  js  c++  java
  • 2019年2月24日 装饰器基本实现

    #装饰器框架
    import time
    def timer(func):
        def wrapper():
            #print(func)
            start_time=time.time()
            func()#就是在运行test()
            stop_time=time.time()
            print("stop-start=%s"%(stop_time-start_time))
        return wrapper# 这个return 是针对timer函数的
    
    
    def test():
        time.sleep(2)
        print('test函数运行完毕')
    
    test=timer(test)#返回的是wrapper的地址,然后重新对test进行赋值操作
    test()#执行的是wrapper()
    
    #@timer 语法堂?就相对于做了test=timer(test) 这个操作
    #需要传装饰哪个函数,就在哪个函数上面填写@timer

    》》》》》》》》》》》》》》》》》》》》》》》》

    标准写法:(不带返回值)

    #装饰器框架
    import time
    def timer(func):
        def wrapper():
            #print(func)
            start_time=time.time()
            func()#就是在运行test()
            stop_time=time.time()
            print("stop-start=%s"%(stop_time-start_time))
        return wrapper# 这个return 是针对timer函数的
    
    
    @timer
    def test():
        time.sleep(2)
        print('test函数运行完毕')
    
    def test2():
        time.sleep(3)
        print("test2函数运行完毕")
    
    @timer
    def test3():
        time.sleep(1)
        print("test3函数运行完毕")
    
    test()
    test2()
    test3()

    >>>

    test函数运行完毕
    stop-start=2.0032529830932617
    test2函数运行完毕
    test3函数运行完毕
    stop-start=1.0023720264434814

    最终版 带返回值

    #装饰器框架
    import time
    def timer(func):
        def wrapper():
            #print(func)
            start_time=time.time()
            res=func()#就是在运行test()并获得一个返回值
            stop_time=time.time()
            print("stop-start=%s"%(stop_time-start_time))
            return res
        return wrapper# 这个return 是针对timer函数的
    
    
    @timer
    def test():
        time.sleep(2)
        print('test函数运行完毕')
        return "这是test的返回值"
    
    res2=test()
    print(res2)#此处 运行test实际运行的是timer里的wrapper,所以没有原来test的返回值

    》》》》

    test函数运行完毕
    stop-start=2.0010669231414795
    这是test的返回值

    超级终极版-传递不确定数量的参数

    import time
    def timer(func):
        def wrapper(*args,**kwargs):#必须使用*,和**,因为参数数量不确定
            start_time=time.time()
            res=func(*args,**kwargs)#就是在运行test()并获得一个返回值
            stop_time=time.time()
            print("stop-start=%s"%(stop_time-start_time))
            return res
        return wrapper# 这个return 是针对timer函数的
    
    
    @timer
    def test(name,age):
        time.sleep(2)
        print('test函数运行完毕,名字是%s,年纪是%s'%(name,age))
        return "这是test的返回值"
    @timer
    def test1(name,age,gender):
        time.sleep(1)
        print('名字是%s,年纪是%s,性别是%s'%(name,age,gender))
        return "这是test1的返回值"
    
    res2=test('sxj',22)
    print(res2)#此处 运行test实际运行的是timer里的wrapper,所以没有原来test的返回值
    res3=test1('abc',33,'man')
    print(res3)
  • 相关阅读:
    进程、线程和协程的图解
    Python多线程的原理与实现
    Python多进程原理与实现
    python面试题-1
    数据库事务隔离级别--读未提交,读已提交,重复读,序列化
    java--浅谈线程(二、线程的方法和状态)
    java--浅谈线程(一简单介绍)
    类加载机制--浅谈
    JSP/Servlet Web 学习笔记 DayThree
    JSP/Servlet Web 学习笔记 DayThree —— 实现一个登陆小界面
  • 原文地址:https://www.cnblogs.com/python1988/p/10426015.html
Copyright © 2011-2022 走看看