1.闭包
闭包:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。
在Python中创建一个闭包可以归结为以下三点:
- 闭包函数必须有内嵌函数
- 内嵌函数需要引用该嵌套函数上一级namespace中的变量
- 闭包函数必须返回内嵌函数
1 def fun(x): 2 def add(y): 3 return x+y 4 return add 5 d= fun(2) 6 print(d(1)) # 3 7 print(d(3)) # 5
2.装饰器
- 装饰器本身是一个函数,用于装饰其它函数,增强被装饰函数的功能,装饰器一般接受一个函数对象作为参数,已对其进行增强。
- 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
import time def timeit(func): # 定义一个计时器,传入一个,并返回另一个附加了计时功能的方法 def wrapper(): # 定义一个内嵌的包装函数,给传入的函数加上计时功能的包装 start = time.clock() func() end =time.clock() print("time %.4f"%(end-start)) # 将包装后的函数返回 return wrapper @timeit def fun(): for i in range(10000):pass print("this test fun!") fun() # -------------------------------------------------- # this test fun! # time 0.0009