首页 > 其他 > 详细

闭包、装饰器

时间:2020-12-19 09:57:24      阅读:41      评论:0      收藏:0      [点我收藏+]

闭包:

   闭包的演变过程:

     技术分享图片

 

 

     技术分享图片

    技术分享图片

 

 

 

     技术分享图片

 

 

     优点:比全局变量的方式好在:k, b是函数line_4的一部分 而不是全局变量,

        因为全局变量可以任意的被其他函数所修改

    缺点:如果要计算多条线上的y值,那么需要在调用的时候进行传递参数,麻烦

   技术分享图片

    技术分享图片

  闭包的概念:  

    "闭包"的本质就是函数的嵌套定义,即在函数内部再定义函数
    "闭包"有两种不同的方式,第一种是"返回一个函数的名称",第二种是在函数内部"直接调用",本质上是一样

  闭包的定义:

    在一个外函数中定义一个内函数,内函数里运用了外函数的临时变量,

    并且外函数的返回值是内函数的引用,这样就构成了一个闭包

  闭包的三要素:

    1、函数的嵌套

    2、内层函数使用外层函数的变量

    3、外层函数返回内层函数的引用

    技术分享图片

 

 

   代码演示:

    返回函数名称

      技术分享图片

 

 

     函数内部"直接调用"

      技术分享图片

 

 

   闭包总结

    为什么存在闭包

      1、能够让临时变量长期存在

      2、比面向对象节约资源

    闭包的三要素

      1、函数的嵌套

      2、内层函数使用外层函数的变量

      3、外层函数返回内层函数的引用

装饰器:

   装饰器的引入

     银行取钱:

       技术分享图片

   装饰器的作用:

     在不改=改变原有代码的基础上,添加额外的功能。

   语法糖:

     格式:@outer  # get_money = outer(get_money)

     代码案例:

       技术分享图片

 

    装饰器格式:

      技术分享图片

 

       注意:装饰器是一旦使用了@语法糖,便开始进行装饰,并非是在函数调用的时候才开始装饰

   装饰器的定义

     1、装饰器需要有外层函数和内层函数

     2、在装饰器的内层函数中调用要被装饰的函数

     3、在外层函数中不要忘记返回内层函数的应用

     4、外层函数就是那个装饰器

   装饰器的应用场景
      引入日志、函数执行时间统计、执行函数前预备处理、执行函数后清理功能、权限校验等

      场景、缓存、事务处理、数据清理、数据添加、附加功能等

      代码实现

        计算代码执行时间

           技术分享图片

        装饰器报错日志案例

·           技术分享图片

 

    装饰器的分类

      没有参数没有返回值

        装饰器报错日志案例、计算代码执行时间、便是此类型

      有参数没有返回值

        技术分享图片

     多个函数共用一个装饰器

        技术分享图片

        技术分享图片

     不定长参数的函数装饰(万能)

        技术分享图片

     有返回值的函数进行装饰

        技术分享图片

 

      注意点

        如果想要对函数装饰,不管有没有参数,有几个参数,有没有返回值,

        ①只需要用`*args`和`**kwargs`来完成不定长参数,

        ②在调用的时候,使用`*args`和`**kwargs`来拆包,

        ③同时接收原函数的返回值结果,同时`return`返回即可。那么此时这个装饰器即为万能装饰器

         装饰器并不是在函数调用的时候才开始装饰,而是一个开始就已经进行了装饰

      装饰器高级用法(多个装饰器装饰同一个函数)

        技术分享图片

 

         多层装饰器开始执行时,先启用挨着函数的装饰器,之后再依次向上递推,执行的时候,

         先执行侯勇的装饰器函数,依次执行,关闭的时候再递推回去,相当于栈的双向使用。

   装饰器总结

     1.装饰器多用于日志文件

     2.装饰器可以传参可以有返回值  

     3.传参使用*args和**kwargs可以传入不定长参数,且注意拆包,之后返回即可

 

          

闭包、装饰器

原文:https://www.cnblogs.com/wenchao-123/p/14158029.html

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