python学习第十二天:闭包函数与装饰器

Posted luck_L

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

以上是关于python学习第十二天:闭包函数与装饰器的主要内容,如果未能解决你的问题,请参考以下文章

学习Python第十二天

Python学习第十一课——装饰器

python 第十二天2018.04.01 带参数的装饰器,,函数的有用信息

基础学习之第十二天(装饰器的进阶)

Python之第十八天的努力--装饰器初识

菜鸟学Python第十二天