python之函数:二

本文从以下几个方面入手更多了解python函数:

  1. 函数中的变量作用域
  2. 函数中的闭包现象
  3. 函数中的装饰器
  4. 标准库中的装饰器
  5. 叠加装饰器
  6. 参数化装饰器模式

def A(func):

  def B():

     return 

  return B

函数中的LEGB原则:即本地作用域->外部作用域->全局作用域->到此就可以了...

      对于函数B而言  B的函数体叫本地作用域,A的函数体叫B的外部作用域,A所在的文件是B的全局作用域

      如果需要在B中进行全局变量的修改q请使用global关键字对变量进行申明

函数中的闭包:

    对于B的函数体能够调用A作用域下的变量 c的行为称为闭包   标准的定义:非全局作用域下的函数能够记住它被命名的封闭空间(B封闭于A)

    其中变量Cc称之为自由变量 :指未在本地作用域中绑定的变量  q其中使用nonlocal去申明自由变量  (如同global)

     

装饰器:

    定义:能够增强函数的行为   在目标函数前执行l另一个函数对目标函数进行修饰

    表现:形如ex就是一个装饰器

    使用: @A

       def target():

          pass

参数化装饰器:都知道装饰器接受目标函数的函数名作为参数进行传递,那么如果被装饰的目标函数带有参数怎么办?

       在装饰器外面在嵌套一层函数,去处理目标函数的参数问题

        def add(*args,**kwargs):

          def A(func):

            def B(*args,**kwargs):

              return res

            return B

          return A

        其中add函数c称之为g工厂函数,专门用来处理目标函数的参数问题

标准库中的装饰器:

    functools.lru_cache  其中lru_cache 是 least recently used 对最近执行过的函数 做一个记录 避免重复执行    

        功能就是备忘,极大简化运行时间

    functools.singledispatch  d单点分发 

        这种设计模式z在 Djangoh和 REST frameworkz 的CBV模式中也有体现

        根据第一个参数的类型来以不同的方式执行同一组函数

        (多分派 :根据多个参数来选择专门的函数)

原文地址:https://www.cnblogs.com/zengmu/p/11588556.html