函数(2)

函数对象

  函数对象是第一类对象,函数是第一等公民

  ###  函数可以被当做变量去使用

  1、可以被赋值

    def func():

    x = func

  2、可以当做参数传给另外一个参数

    def func():

      return 1

    def func1(x):

      retrun x

    func1(func())

  3、可以当做函数的返回值

    def func():
      return func

  4、可以当做容器类型的元素

函数嵌套

  def outter():

    def wrapper():

      pass

名称空间与作用域

  1、内置空间名称:存放的是Python解释器自带的名字,例如len,sum,print,input

    生命周期:解释器启动则产生,解释器关闭则销毁

    2、全局名称空间:存放的是顶级的名字,指的是未经历首行缩进的那些变量,被if缩进的同样属于全局名称,顶格写的函数也算是全局名称

    生命周期:py程序刚开始运行则立即产生,py程序结束则销毁

    3、局部名称空间:存放的是函数内的名字

    生命周期:函数调用则产生,函数调用结束则销毁

  名字访问的优先级:L--->E--->G--->B

    基于自己当前所在位置一个个往外找

    名称空间的“嵌套”关系在函数定义之初、扫描语法时产生的,与调用位置无关

    global:用来在局部修改全局的不可变类型的值

    nonlocal:用来修改上一层不可变类型的值,无法找到全局名称的变量

闭包函数:函数对象+函数的嵌套定义+名称空间与作用域

  为函数体传参有两种方案

    1、直接以参数的形式传入

    2、包给它

    使用第二种方法,就不得不提到一种编程思想、装饰器

装饰器

  什么是装饰器

    装饰器指的是装饰别人的工具,装饰指的则是为被装饰者添加新功能

    但是实现装饰器必须遵循的原则是“开放封闭原则”

    开发指的是对扩展新功能是开放的,封闭指的是对修改源代码以及调用方式是封闭的

    综上。。。装饰器指的是创建一个工具,可以再

      1、不修改被装饰对象源代码

      2、不修改被装饰对象调用方式的前提下

    如何使用装饰器

    无参装饰器模板

      def outter(func):

        def wrapper(*args,**kwargs):

          res = func(*args,**kwargs)

          return res

        return wrapper

    有参装饰器模板

      def auth(mode):

        def outter(func):

          def wrapper(*args,**kwargs):

            res = func(*args,**kwargs)

            return res

          return wrapper

        return outter

    如何调用装饰器

      @outter or @auth(mode)

      def index():

        print("from index")

 

posted @ 2021-03-30 15:21  ╰╮  阅读(100)  评论(0)    收藏  举报