• python基础 day15 装饰器


    今日内容大纲

    一、内容回顾作业讲解

    1、匿名函数 一句话函数,多与内置函数,列表推导式结合

    2、内置函数:min max sorted 、map reduce、bytes

    3、闭包:

    • 一定是函数嵌套在函数中

    • 内层函数对外层函数的非全局变量的使用

    • 作用:保证数据安全,自由变量不会在内存中消失,而且全局引用不到

    二、装饰器

    1、开放封闭原则

    • 开放:对代码的拓展开放

    • 封闭:对源码的修改是封闭的

    • 在不改变原函数的代码及调用方式的前提下,为其增加新的功能

    装饰器的本质就是闭包
    """
    装饰器基本格式
    """
    import time
    def index():
       time.sleep(3)
       print("欢迎登录博客园首页!")
    def func(f):
       def inner():
           start_time = time.time()
           f()
           end_time = time.time()
           print(f'测试效率时间差:{end_time-start_time}')
       return inner
    index = func(index)  # func(index) 得到的是 inner
    index()  

    被装饰函数不带返回值

    import time
    def func(f):
      def inner():
          start_time = time.time()
          f()
          end_time = time.time()
          print(f'测试效率时间差:{end_time-start_time}')
      return inner
    @func #等价于index = func(index)
    def index():
      time.sleep(3)
      print("欢迎登录博客园首页!")
    index()

     

    被装饰器带返回值
    import time
    def func(f):
       def inner():
           start_time = time.time()
           r = f()
           end_time = time.time()
           print(f'测试效率时间差:{end_time-start_time}')
           return r
       return inner
    @func  #等价于index = func(index)
    def index():
       time.sleep(3)
       print("欢迎登录博客园首页!")
       return 666

    ret = index()
    print(ret)

    1609225573225

    被装饰器参数
    import time
    def func(f):
       def inner(*args,**kwargs):
           start_time = time.time()
           r = f(*args,**kwargs)
           end_time = time.time()
           print(f'测试效率时间差:{end_time-start_time}')
           return r
       return inner
    @func  #等价于index = func(index)
    def index(name):
       time.sleep(3)
       print(f"欢迎{name}登录博客园首页!")
       return 666
    @func
    def barry(name,age):
       time.sleep(3)
       print(f"欢迎{age}岁{name}登录博客园首页!")
       return 777
    ret = index("憨子")
    print(ret)
    ret_1 = barry("宝气",12)
    print(ret_1)

    装饰器的标准格式

    def  wrapper(f):
      def inner(*args,**kwargs):
          """添加额外的功能,执行被装饰函数之前的操作"""
          ret = f(*args,**kwargs)
          """添加额外的功能,执行被装饰函数之后的操作"""
          return ret
      return inner

     

  • 相关阅读:
    org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException)
    linux命令之find和locate
    Java多线程3:Thread中的静态方法
    session的使用
    cookie的简单使用
    Spring 注入集合类型
    对Spring 容器管理事务支持的总结
    对SpringDAO层支持的总结
    为spring代理类设置属性值
    在spring中获取代理对象代理的目标对象工具类
  • 原文地址:https://www.cnblogs.com/iaoyuyuyuhuanghuang/p/14208628.html
Copyright © 2020-2023  润新知