• 二十六、装饰器(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
        • 示例效果

           

  • 相关阅读:
    koa学习
    nodejs工作大全
    《程序员周先生之前端开发面试题》
    使用vue技术应当使用的技术和兼容性选择
    IdentityServer4简单入门demo系列 (一)认证服务端
    IdentityServer4客户端获取Token的方法
    wpf 右键菜单的使用
    wpf 在用户控件里,关掉父级窗口
    EntityFramework集成Sqlite的详细步骤
    wpf DataGrid 里的列模版的值绑定
  • 原文地址:https://www.cnblogs.com/nuochengze/p/13286140.html
Copyright © 2020-2023  润新知