迭代器,生成器
可迭代对象
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__())

浙公网安备 33010602011771号