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)

上一篇:ASP.NET 服务器控件的生命周期


下一篇:ANDROID基础ACTIVITY篇之Activity的生命周期(一)