迭代器,生成器

可迭代对象

dir(xx) 可以查看xx数据类型是否有 __iter__(),iterable()方法

所有有__iter__()方法都可以使用for循环,都是可迭代对象,可迭代对象可以使用__iter__()方法获取到迭代器

迭代器有 __iter__()方法 ,__next__方法

迭代器的特点: 1.惰性机制 2.几乎不占用内存3.只能向前 4可以使用for循环

*********注意for循环底层就是使用迭代器*****************

lst = ["赵一宁", "石可心", "朱奎峰", "姚明","潘长江"]
it = lst.__iter__() # 获取迭代器
while 1:
    try:    # 尝试执行
        el = it.__next__()  # 获取下一个元素
        print(el)
    except StopIteration:   # 处理错误
        break

生成器:

def func():
    print("娃哈哈")
    yield 1 # return和yield都可以返回数据
    print("呵呵呵")


gen = func() # 不会执行你的函数. 拿到的是生成器


函数中如果有yield 这个函数就是生成器函数. 生成器函数() 获取的是生成器. 这个时候不执行函数
yield: 相当于return 可以返回数据. 但是yield不会彻底中断函数. 分段执行函数.
gen.__next__() 执行函数. 执行到下一个yield.
gen.__next__()  继续执行函数到下一个yield.
def order():
    for i in range(10000):
        yield "衣服"+str(i)
g = order() # 获取生成器
mingwei = g.__next__()
print(mingwei)
zhaoyining = g.__next__()
print(zhaoyining)

 元组推导式也是生成器.

tu = (i for i in range(10)) # 没有元组推导式.  只有生成器表达式
# print(tu.__next__())
# print(tu.__next__())
# print(tu.__next__())
# print(tu.__next__())
# print(tu.__next__())
# print(tu.__next__())
# print(tu.__next__())
# print(tu.__next__())
# print(tu.__next__())
# print(tu.__next__())
# print(tu.__next__())
posted @ 2021-01-18 13:21  苦行僧冬*婷  阅读(37)  评论(0)    收藏  举报