闭包函数:

什么是闭包函数:

闭指的是定义在一个函数内部

包指的是该函数包含对外部作用域(非全局作用域)名字的引用

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)

最新文章

  1. NSMutableAttributedString 的使用
  2. js 日期对象Date以及传参
  3. POJ 1163:The Triangle
  4. C#与数据库访问技术总结(十七)
  5. hdu 3172 Virtual Friends (映射并查集)
  6. Web 项目 中读取专用配置文件
  7. win7怎么调屏幕自动休眠时间
  8. TCP三次握手和http过程
  9. ASP.Net引用类库出现问题 二
  10. 完成端口(Completion Port)详解(超级长,超级清楚)
  11. Xcode开发和调试总结
  12. EntityFrameWork连接多Db配置
  13. Memcached介绍
  14. 数据库表中不建索引,在插入数据时,通过sql语句防止重复添加
  15. Financiers Game CodeForces - 737D (博弈论)
  16. Spring IOC(六)依赖查找
  17. canvas实现涂鸦板
  18. 《Bandwidth-Aware Scheduling With SDN in Hadoop:A New Trend for Big Data》--2017
  19. NOI前各种Idea总结以及各种文本乱堆
  20. OpenStack 认证服务 KeyStone 服务注册(五)

热门文章

  1. Java 中的成员内部类
  2. 【转】gif文件格式详解
  3. linux下暴力破解工具hydra【转】
  4. SD卡spi读写流程
  5. iOS 真机调试报错汇总
  6. puppet安装和配置
  7. dotnet core多平台开发体验(mac os x 、windows、linux)
  8. Highcharts创建一个简单的柱状图
  9. python中的is, ==与对象的相等判断
  10. WordPress 性能优化:为什么我的博客比你的快