美文网首页
Python—闭包与装饰器

Python—闭包与装饰器

作者: LionKing_ | 来源:发表于2018-11-07 11:20 被阅读0次
将之前学习Python的笔记整理记录下来。
闭包
概念:
  一种组织代码的结构,减少了参数传递,提高了代码的可重复使用性
  如果在一个内嵌函数里,对在外部函数内的变量进行引用,那么内嵌函数就被认为闭包。
缺点:
  由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存。
前提:
  1.必须有一个内嵌函数
  2.内嵌函数必须引用外部函数的变量
  3.外部函数的返回值必须是内部函数对象
举例:
  def func(a, b):
      def func_in(x):
         return a * x + b
      # 返回内部函数
      return func_in

  if __name__ == '__main__':
      ts = func(1, 1)
      # 传递参数
      print(ts(2))
装饰器
概念:
  1.装饰器其实是用闭包来实现的。
  2.本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。
  3.装饰器不能对被装饰的函数内部进行操作 只能在函数执行之前或者后面添加功能。
应用场景:
  参数检查(Agrument checking)
  缓存(Caching)
  代理(Proxy)
  提供上下文(Context Provider)
装饰器执行/装饰顺序:
  装饰由下到上 执行由上到下
举例:
  def add_fun(func3):
    # 定义不定长参数 接收
    def fun_in(*args, **kwargs):
        print("---add----")
        # 无论有没有返回值 都接受
        ret = func3(*args, **kwargs)
        return ret
    return fun_in

  # 装饰有参数的函数
  @add_fun
  def func(fun):
      print("fun ", fun)

  # 装饰有返回值的函数
  @add_fun
  def func1():
      return "func1"

  if __name__ == '__main__':
      func(123)
      ret = func1()
      print(ret)
闭包和装饰器区别:
  装饰器需要传递被装饰的函数对象给装饰器
  闭包则需要传递变量给内嵌函数

相关文章

  • Python的自定义超时机制——装饰器的妙用

    装饰器 关于装饰器的入门,可以参考这篇文章:12步轻松搞定python装饰器简单来说,装饰器其实就是一个闭包(闭包...

  • 2020-012 python闭包与装饰器

    python闭包与装饰器 闭包 函数和对其周围状态(lexical environment,词法环境)的引用捆绑在...

  • Python装饰器-专题笔记

    学会装饰器,Python更进阶 函数作用域到闭包到装饰器讲解,及闭包和装饰器的运用。 [√] 慕课网Meshare...

  • [python] 装饰器学习

    很多python的代码都带有装饰器=。=现在不学以后也要学学一下装饰器 闭包 在学装饰器之前先看看python的闭...

  • Python 2 - 高级用法 - 装饰器

    Python 2 - 高级用法 - 装饰器 一谈到 装饰器,就离不开闭包 闭包 闭包就是能够读取其他函数内部变量的...

  • Python装饰器——初识

    上次讲了Python的闭包,今天来讲一下闭包的应用——装饰器 1. 装饰器是什么 什么叫装饰器?顾名思义,它是一个...

  • python装饰器

    装饰器简述 要理解装饰器需要知道Python高阶函数和python闭包,Python高阶函数可以接受函数作为参数,...

  • python之理解闭包和装饰器

    python之理解闭包和装饰器 1、闭包函数 1.1 python中函数都是对象 结果: 上面定义一个shut函数...

  • Python闭包与装饰器

    闭包 1.函数引用 运行结果: 2.什么是闭包 运行结果: 3.重讲闭包 内部函数对外部函数作用域里变量的引用(非...

  • 【python】闭包与装饰器

    # 本次讲述的知识点也是非常重要的(严肃脸) # 先有的闭包,之后才生成了装饰器,同样的也是非常简单的东西。 # ...

网友评论

      本文标题:Python—闭包与装饰器

      本文链接:https://www.haomeiwen.com/subject/bzvmxqtx.html