# 迭代器和装饰器# 迭代器:# 双下方法:很少直接调用的方法。一般情况下,是通过其他语法触发的# 可迭代的 —— 可迭代协议 含有__iter__的方法(‘__iter__’in dir(数据))# 可迭代的一定可以被for循环# 迭代器协议: 含有__iter__和__next__方法# 迭代器一定是可迭代的,可迭代的通过调用iter()方法就能得到一个迭代器# 迭代器的特点: # 很方便使用,且只能取所有的数据取一次 # 节省内存空间# 生成器# 生成器的本质就是迭代器# 生成器的表现形式 # 生成器函数 # 生成器表达式# 生成器函数: # 含有yield关键字的函数就是生成器函数 # 特点: # 调用函数的之后函数不执行,返回一个生成器 # 每次调用__next__()方法的时候会取到一个值 # 直到取完最后一个,再执行next会报错