• 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模式中也有体现

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

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

  • 相关阅读:
    eclipse下配置Spring环境
    筑梦路上的孤独行者
    Js继承各模式总结
    水题-poj1979
    C++静态数据成员存在的意义
    Mac_Sublime_JavaScript
    LeetCode204——count primes
    (吐槽)讨厌的VIP机制
    LeetCode55——Jump Game
    LeetCode62——Unique Paths
  • 原文地址:https://www.cnblogs.com/zengmu/p/11588556.html
Copyright © 2020-2023  润新知