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)