python基础之闭包函数与装饰器
2024-08-25 19:53:29
闭包函数:
什么是闭包函数:
闭指的是定义在一个函数内部
包指的是该函数包含对外部作用域(非全局作用域)名字的引用
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)
最新文章
- NSMutableAttributedString 的使用
- js 日期对象Date以及传参
- POJ 1163:The Triangle
- C#与数据库访问技术总结(十七)
- hdu 3172 Virtual Friends (映射并查集)
- Web 项目 中读取专用配置文件
- win7怎么调屏幕自动休眠时间
- TCP三次握手和http过程
- ASP.Net引用类库出现问题 二
- 完成端口(Completion Port)详解(超级长,超级清楚)
- Xcode开发和调试总结
- EntityFrameWork连接多Db配置
- Memcached介绍
- 数据库表中不建索引,在插入数据时,通过sql语句防止重复添加
- Financiers Game CodeForces - 737D (博弈论)
- Spring IOC(六)依赖查找
- canvas实现涂鸦板
- 《Bandwidth-Aware Scheduling With SDN in Hadoop:A New Trend for Big Data》--2017
- NOI前各种Idea总结以及各种文本乱堆
- OpenStack 认证服务 KeyStone 服务注册(五)