python闭包与装饰器
2018-01-21 14:47
363 查看
首先闭包函数我的理解是,一个函数内可以嵌套定义一个函数,并将嵌套定义的函数返回(如果不返回运行完函数对象也就销毁了),嵌套函数可以接收外部函数的参数,不同参数就可以变更嵌套函数的功能,返回不同功能的嵌套函数对象。
以下是闭包函数简单示例,如果inner函数不接收outer的参数x也就没有意义了,一定要返回内部函数。
运行结果为1, {'x': 1}, 2, {'x': 2}。
装饰器就是闭包函数的升级版,外部函数的参数为被装饰的函数对象func,嵌套的函数wrapper接收原本由func接收的参数,在内部将这些参数给func使用,加上一些额外的功能后,再将func的结果返回。
以下例子就是廖雪峰教程的习题,请设计一个decorator,它可作用于任何函数上,并打印该函数的执行时间。
以下是闭包函数简单示例,如果inner函数不接收outer的参数x也就没有意义了,一定要返回内部函数。
def outer(x): def inner(): print(x) print(locals()) return inner foo = outer(1) foo() foo = outer(2) foo()
运行结果为1, {'x': 1}, 2, {'x': 2}。
装饰器就是闭包函数的升级版,外部函数的参数为被装饰的函数对象func,嵌套的函数wrapper接收原本由func接收的参数,在内部将这些参数给func使用,加上一些额外的功能后,再将func的结果返回。
以下例子就是廖雪峰教程的习题,请设计一个decorator,它可作用于任何函数上,并打印该函数的执行时间。
import time def metric(func): def wrapper(*args, **kwargs): start = time.time() res = func(*args, **kwargs) end = time.time() print('%s executed in %s ms'%(func.__name__, (end-start)*1000)) return res return wrapper @metric def fast(x, y): time.sleep(0.0012) return x + y; @metric def slow(x, y, z): time.sleep(0.1234) return x * y * z; f = fast(11, 22) s = slow(11, 22, 33) print(f) print(s)
相关文章推荐
- Python 中的闭包与装饰器
- 21.python中的闭包和装饰器
- Python闭包的高级应用-装饰器的实现
- python 闭包及装饰器
- Python的闭包和装饰器
- 【语言工具】Python闭包,装饰器,生成器,偏函数,函数式编程,lamda,map,reduce,filter
- 对python的闭包,装饰器的理解
- python基础-闭包、装饰器
- 关于Python中闭包与装饰器的理解
- python闭包和装饰器的例子
- python的闭包,装饰器,@
- python闭包,装饰器,生成器
- 详解 Python中LEGB和闭包及装饰器
- python闭包,装饰器
- python核心高级学习总结8------动态性、__slots__、生成器、迭代器、装饰、闭包
- 流程的Python 第七章:函数装饰器和闭包
- python 装饰器、内部函数、闭包简单理解
- python的闭包及装饰器 推荐
- Python闭包与装饰器
- python的装饰器 就是闭包