首页 > 其他 > 详细

二十六、装饰器(decorator)

时间:2020-07-12 01:18:59      阅读:94      评论:0      收藏:0      [点我收藏+]

装饰器

  • 变量作用域

    • 局部作用域

    • 全局作用域

  • 高阶函数

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

    • 函数名可以作为返回值

  • 闭包

    • 示例代码

      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
      • 示例效果

         技术分享图片

二十六、装饰器(decorator)

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!