python闭包、装饰器

时间:2022-04-25 22:51:22

python闭包、装饰器

1、闭包 closure

    闭包是指引用了此函数外部嵌套函数作用域内的变量的函数

  闭包必须满足三个条件:
    必须有一个内嵌函数
    内嵌函数必须引用外部函数中的变量
    外部函数的返回值必须是内嵌函数

python闭包、装饰器python闭包、装饰器
    def make_pow(y):
      def fn(x):
        return x ** y
      return fn


    pow2 = make_pow(2)
    print(pow2(10)) # 100
    del pow2 # 释放闭包函数, 同时释放闭包
      # 绑定的外部嵌套函数的执行环境
View Code

  闭包的特点:
    闭包中外部嵌套函数中的变量不会在函数调用后立即销毁,而是被内嵌函数引用
  使用闭包的注意事项:
    由于闭包会使得函数中的变量都被保留在内存中,内存消耗比较大,所以不能滥用闭包

python闭包、装饰器

2、装饰器 decorators(专业提高篇)
    装饰器是一个函数,主要作用是用来包装另一个函数或类(后面才讲)

  作用:
    在不修改被装饰函数的源代码,不改变被装饰的函数的调用方式的情况下添加或改变原函数的功能。

  函数装饰器的语法:
    def 装饰器函数名(fn):
      语句块
      return 函数对象

    @装饰器函数名 <换行>
    def 被装饰函数名(形参列表):
      语句块

python闭包、装饰器python闭包、装饰器
    def mydeco(fn):
      def fx():
        print("++++++++++++++++")
        fn()
        print('----------------')
      return fx



    @mydeco
    def myfunc():
      print("myfunc函数被调用")


    # myfunc = mydeco(myfunc) # 添加装饰器


    myfunc()
    myfunc()
View Code

3、函数的文档字符串
    函数内第一次未赋值给任何变量的字符串是函数的文档字符串

  语法:
    def 函数名(参数列表):
      '函数文档字符串'
      语句块
  示例:
    def myfunc(a, b, c):
      '这是函数的文档字符串'
      pass
    >>> help(myfunc)
5、函数的 __doc__属性
  __doc__属性用于绑定函数的文档字符串

6、函数定义语句(def 语句)的完整语法:
  [@装饰器名1]
  [@装饰器名2]
  [...]
  def 函数名([位置形参],[*元组形参], [命名关键字形参],[**字典形参]):
    '''文档字符串'''
    语句块