# 迭代器和生成器 ''''''
''''''
'''
迭代器：
双侠方法：很少直接调用的方法。一般情况下，是通过其他语法触发
可迭代的 -- 可迭代协议 含有__iter__的方法，（'__iter__' in dir(数据)）
可迭代的一定可以被for循环
迭代器协议：含有__iter__、__next__方法
迭代器一定可迭代，可迭代的通过调用iter()方法就能得到一个迭代器

迭代器的特点：
    方便使用，且智能取所有的数据一次
    节省内存空间
'''

'''
生成器
生成器的本质就是迭代器
生成器的表现形式
    生成器函数
    生成器表达式

生成器函数：
    含有yield关键字的函数就是生成器
    特点：
        调用函数的之后函数不执行，返回一个生成器
        每次调用next方法的时候会取到一个值
        直到取完最后一个，再执行next会报错
   
又一个文件，从文件中分段读取内容
readline
read(10)     
再读出来的内容前面加上一个'**'，在返回给调用者
'''

def generator():
    for i in range(200):
        yield 'ls{}'.format(i)
g = generator()
num = 0
for i in g:
    num += 1
    if num > 20:
        break
    print(i)