zoukankan      html  css  js  c++  java
  • python基础之闭包函数与装饰器

    闭包函数:

    什么是闭包函数:

             闭指的是定义在一个函数内部

             包指的是该函数包含对外部作用域(非全局作用域)名字的引用

    def counter():
      n=0
      def incr():
        nonlocal n
        x=n
        n+=1
        return x
      return incr
    
    c=counter()
    print(c())
    
    闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域

    装饰器

    1.什么是装饰器

             就目前来看:装饰器就是定义一个函数,只不过该函数的功能是用来为其它函数添加额外的功能的

             其实:装饰器本身其实可以是任意可调用的对象,

                        被装饰的对象也可以是任意可调用的对象。

    2.为什么要用装饰器

             软件维护应该遵循开发封闭原则:

             开放封闭原则指的是:

                      ①软件一旦上线运行后对修改源代码是封闭的

                      ②对扩展功能是开放的

             这就用到了装饰器

             装饰器的实现必须遵守两大原则:

             ①不可修改被装饰对象的源代码

             ②不可修改被装饰对象的调用方式

    import time
    def timmer(func):
        def wrapper(*args,**kwargs):
            start_time=time.time()
            res=func(*args,**kwargs)
            stop_time=time.time()
            print('run time is %s' %(stop_time-start_time))
            return res
        return wrapper
    
    @timmer
    def foo():
        time.sleep(3)
        print('from foo')
    foo()
    

      

    其实@代表语法糖

    @timmer 表示foo = timmer(foo)

  • 相关阅读:
    web常用自动化库——selenium总结(转)
    前端框架面试题
    SpringBoot整合Knife4j展示更美观的API文档
    JUC- ThreadLocal学习笔记
    JUC-ThreadPool线程池的使用与学习
    Java8 新特性
    SpringBoot 整合FreeMarker进行邮件发送
    IDEA 打开别人的项目的是Maevn插件依赖出错问题处理
    Liunx常用指令备查
    第四次作业
  • 原文地址:https://www.cnblogs.com/luck-L/p/9168638.html
Copyright © 2011-2022 走看看