zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    HDU_2191_多重背包
    HDU_1494_dp
    POJ_1088_dfs
    所有的畅通工程[HDU1232][HDU1874][HDU1875][HDU1879]
    畅通工程[HDU1863]
    还是畅通工程[HDU1233]
    最小生成树
    Who's in the Middle[HDU1157]
    Bungee Jumping[HDU1155]
    Is It A Tree?[HDU1325][PKU1308]
  • 原文地址:https://www.cnblogs.com/iaoyuyuyuhuanghuang/p/14208628.html
Copyright © 2011-2022 走看看