生成器都是迭代器,迭代器不一定是生成器
迭代器满足两个条件: 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) #print(next(d)) # nameprint(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