python之装饰器与生成器
来源:互联网 发布:宁波二手房交易数据 编辑:程序博客网 时间:2024/06/05 20:06
装饰器和生成器
装饰器:
defhello(fn):
@hello
deffoo():
foo() #6
装饰器执行流程如上图所标注的那样:
第一步:执行def
第二步:执行@hello。此句的意思为:foo = hello(foo),也就是将foo函数作为参数传递给hello函数,再回调
第三步:此时fn=foo
第四步:执行wrapper函数
第五步:返回整个wrapper函数
第六步:foo()=wrapper()。输出wrapper()函数的值,此前因为foo = hello(foo),而执行hello(foo)函数,返回的结果就是wrapper整个函数,所以foo()=wrapper().
重点理解:
1.python中一切皆为对象,函数是第一类对象,所谓第一类对象,意思是可以用标识符给对象命名,并且对象可以被当作数据处理,例如赋值、作为参数传递给函数,或者作为返回值return等,所以foo函数才可以作为参数去传递,才可以出现return wrapper.
2.foo()和foo的区别,foo是函数,foo()是调用函数后的值,无论是把函数赋值给新的标识符,还是把函数作为参数传递给新的函数,针对的都是函数对象本身,而不是函数的调用。foo函数对象本身,foo()函数的调用。
生成器:
·
·
·
·
生成器优点:
Python使用生成器对延迟操作提供了支持,所谓延迟操作,是指在需要的时候才产生结果,而不是立即产生结果。
- 生成器是可迭代对象;
- 实现了延迟计算,省内存(按需执行);
- 生成器本质和其他类型一样,都是实现了迭代器协议,只不过生成器是一边计算,一边生成,从而节省内存空间,其余的可迭代对象可没有这个功能。
迭代器协议:生成器自动实现了迭代器协议
迭代器协议是指:对象提供next()方法,它要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代。
可迭代对象:实现了迭代器协议的对象
协议是一种约定,可迭代对象实现迭代器协议,Python的内置工具(for循环、sum、min、max函数等)使用迭代器协议访问对象
在python中,for循环不仅可以遍历列表,也可以遍历文件
with open ('/etc/passwd') as f:for line in f: print(line)
因为文件对象实现了迭代器协议,for循环并不知道它所遍历的是一个文件对象,它只管使用迭代器协议访问对象即可。
注意:生成器只能遍历一次。
例如:
def get_province_population(filename):with open(filename) as f: for line in f: yield int (line)gen = get_province_population('data.txt')all_population = sum(gen) for population in gen: print(population/all_population)
此段代码执行完不会有任何输出,因为在执行到sum时,就已经遍历了生成器,再往下执行时,将不会有任何记录。
- python之装饰器与生成器
- Python之装饰器、迭代器和生成器
- Python生成器、迭代器、装饰器
- Python----装饰器/生成器/迭代器
- python学习之迭代器、生成器和装饰器
- python 学习2:生成器,迭代器,装饰器
- Python自学笔记九、装饰器,生成器
- python之装饰器
- Python之装饰器
- yield、生成器、装饰器
- 装饰器,生成器,迭代器
- 装饰器、迭代器、生成器
- 迭代器 生成器 装饰器
- python 装饰器 上下文管理器 迭代器 生成器 描述符
- Python高级编程1-闭包,迭代器,装饰器,生成器
- python 列表偏平化 & 生成器+装饰器的解决思路
- python 第三天(生成器 迭代器 装饰器 序列化)
- python[变量作用域-函数-闭包-装饰器-生成器]
- 【Tensorflow网络架构简单实现】 用Tensorflow实现VGG模型
- C++ Web 编程
- Androidstudio_Plugs
- Linux 文件结构 简介
- 知道三边判断一个三角形
- python之装饰器与生成器
- 解决webapps目录下不存在Tomcat的部署项目
- C++ Task 的实现(lambda 是个好东西)
- Cordova插件实现原理概论
- Python3与OpenCV3.3 图像处理(一)--环境搭建与简单DEMO
- python中 %总结
- 97/100 Interleaving String/Same Tree
- CF#420 B. Okabe and Banana Trees 思维|暴力|几何
- 使用SwingWorker类完成耗时操作