二十六、装饰器(decorator)

装饰器

  • 变量作用域

    • 局部作用域

    • 全局作用域

  • 高阶函数

    • 函数名可以作为参数输入

    • 函数名可以作为返回值

  • 闭包

    • 示例代码

      def outer():
         x = 10
         def inner():
             print(x)
         return inner
    • 定义

      如果在一个内部函数里,对在外部作用域(不在大全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)

    • 说明

      inner是一个内部函数,inner里引用了外部作用域的变量x(x在外部作用域outer里面,但是不是全局作用域),则这个内部函数inner就是一个闭包

  • 装饰器

    • 示例代码

      import time 


      # 实现装饰器类
      def show_time(func):
         def inner(*args, **kwargs):
             start = time.time()
             func(*args,**kwargs)
             end = time.time()
             return end-start
         return inner

      # 系统写法,简洁优雅
      @show_time
      def add_num(a, b):
         return a+b


      # 自定义写法,繁琐不简洁
      def add_num(a,b):
         return a+b
      add_num_run_time = show_time(add_num)
      add_num_run_time()
    • 示例效果

    • 作用

      添加额外的功能

    • 装饰器参数

      • 通过外嵌一个函数实现

      • 示例代码

        import time 

        def logger(flags=False):
           # 实现装饰器类
           def show_time(func):
               def inner(*args, **kwargs):
                   start = time.time()
                   func(*args,**kwargs)
                   end = time.time()
                   if flags:
                       print("启动记录日志的功能")
                   return end-start
               return inner
           return show_time

        # 系统写法,简洁优雅
        @logger(True)
        def add_num(a, b):
           return a+b
      • 示例效果

         

原文地址:https://www.cnblogs.com/nuochengze/p/13286140.html