生成器都是迭代器,迭代器不一定是生成器
迭代器满足两个条件: 1. 有iter方法 2. 有next方法
# list, tuple, dict, string: iterable(他们都有iter方法,所以都是可迭代对象) # 调用 iter 方法返回的 d 就是一个迭代器 # l = [1, 2, 3, 4, 5] l = {'name': 'lily', 'age': 18} d = iter(l) # 通过 iter 直接返回一个可迭代对象 print(d) # <list_iterator object at 0x0000001EA3547518> print(next(d)) # name print(next(d)) #age
for i in [1, 2, 3, 4]
for 循环内部完成三件事:
1. 调用可迭代对象的 iter 方法返回一个迭代器对象
2. 不断调用迭代器的 next 方法
3. 处理 StopIteration
更多参考:http://www.cnblogs.com/yuanchenqi/articles/5769491.html