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)

猜你喜欢

转载自www.cnblogs.com/luck-L/p/9168638.html