1 生成器
定义
(1)采用惰性计算的方式
(2)无需一次性存储海量数据
(3)一边执行一边计算,只计算每次需要的值
(4)实际上一直在执行next()操作,直到无值可取
生成器表达式
(返回值 for 元素 in 可迭代对象 if 条件)

生成器函数——yield
在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行

2 迭代器
可迭代对象
可直接作用于for循环的对象统称为可迭代对象:Iterable
可以使用isinstance()判断一个对象是否是Iterable对象
(1)列表、元组、字符串、字典、集合、文件
(2)生成器
迭代器
可以被next()函数调用并不断返回下一个值,直至没有数据可取的对象称为迭代器:Iterator
可以使用isinstance()判断一个对象是否是Iterator对象
(1) 生成器都是迭代器
(2) 列表、元组、字符串、字典、集合不是迭代器
可以通过iter(Iterable)创建迭代器
(3)zip enumerate 等itertools里的函数是迭代器
(4) 文件是迭代器
(5)迭代器是可耗尽的
(6)range()不是迭代器
3 装饰器
原因
(1)需要对已开发上线的程序添加某些功能
(2)不能对程序中函数的源代码进行修改
(3)不能改变程序中函数的调用方式
实现
(1)嵌套函数实现

(2)语法糖
一装饰就执行,不必等调用
