zoukankan      html  css  js  c++  java
  • day11_装饰器

    装饰器的本质:一个闭包函数

    装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展

    import time
    
    def func():
        time.sleep(0.01)
        print("加油")
    def timer(f):             #装饰器函数
        def inner():
            start = time.time()
            f()          #被装饰函数
            end = time.time()
            print(end - start)
        return inner
    
    func = timer(func)
    func()
    #不修改原有的函数调用方式,但原有函数前后添加功能
    #timer就是一个装饰器函数只是对一个函数有一些装饰作用

     语法糖:

    import time
    def timer(func):
        def inner():
            start = time.time()
            func()
            print(time.time() - start)
        return inner
    
    @timer   #==> func1 = timer(func1)        语法糖:@装饰器的名字
    def func1():                              被装饰的函数
        time.sleep(0.1)
        print('in func1')
    
    
    func1()
    带有返回值
    import time def timer(func): def inner(
    *args,**kwargs): start = time.time() re = func(*args,**kwargs) print(time.time() - start) return re return inner @timer #==> func2 = timer(func2) def func2(a): print('in func2 and get a:%s'%(a)) return 'fun2 over' func2('aaaaaa') print(func2('aaaaaa')) #输出返回值
    # 装饰器模式
    def warpper(func):
        def inner(*args, **kwargs):
            re1 = func(*args, **kwargs)  # 修饰函数
            return re1
    
        return inner  # 无括号
    
    
    @warpper  # 等价于  func = warpper(func)---返回值是 inner
    def func(*args, **kwargs):
        print("123")
    
    
    re1 = func()  # 函数inner---返回值是re1
  • 相关阅读:
    Java 和 DynamoDB
    关于Mongodb的全面总结
    utf8mb4 使用注意
    mysql 事务隔离讲的比较好的文章收藏。
    [mysql] 常用命令总结
    [JTA] Java事务api
    [Hibernate] Hibernate 参数设置一览表(转)
    Spring配置sessionFactory的几种常用方式
    [前端] org.apache.jasper.JasperException 页面有空引用
    [Hibernate] JPA与Hibernate的优缺点
  • 原文地址:https://www.cnblogs.com/wzc27229/p/10992053.html
Copyright © 2011-2022 走看看