zoukankan      html  css  js  c++  java
  • python闭包、装饰器

    1、闭包 closure

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

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

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

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

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

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

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

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

        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 函数名([位置形参],[*元组形参], [命名关键字形参],[**字典形参]):
        '''文档字符串'''
        语句块

  • 相关阅读:
    刷脸支付真的来啦!华为nova3带你玩转酷时代~
    华为nova3发布,将支持华为AI旅行助手
    华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大!
    Duang,HUAWEI DevEco IDE全面升级啦
    HUAWEI HiAI亮相Droidcon柏林2018开发者峰会 开启HiAI海外生态
    华为快应用引擎架构及开发实践
    C#怎样从指定服务器上下载指定文件到本地电脑上
    史上最全的Android的Tab与TabHost讲解
    Android Browser学习二 BrowserActivity 的初始化 --其他重要模块
    Android Browser学习一 application的初始化
  • 原文地址:https://www.cnblogs.com/zhaoyang1997/p/10503344.html
Copyright © 2011-2022 走看看