常见的多迭代有range()和那些支持迭代的内置类型,比如字符串、列表、元组等。例如字符串的多迭代:
1. 可迭代对象:可以无限次重复遍历
range(10)、列表 list、字符串 str,它们本身只是一个“数据源”或“容器”。每次你用 for 循环去遍历它们时,它们都会重新生成一个全新的迭代器r = range(3) # 第一次遍历,毫无压力 for i in r: print(i, end=" ") # 输出: 0 1 2 print() # 第二次遍历,依然毫无压力 for i in r: print(i, end=" ") # 输出: 0 1 2
2. 迭代器:是一次性的“消耗品”
iter() 生成的对象,或者生成器),它内部维护着一个指针(状态)r = range(3) it = iter(r) # 这里才真正生成了迭代器 # 第一次遍历 for i in it: print(i, end=" ") # 输出: 0 1 2 print() # 第二次遍历,什么都不会发生! for i in it: print(i, end=" ") # 没有任何输出,因为迭代器已经耗尽了
for 循环)吃完走了,餐厅还在,随时可以迎接下一波客人(每次生成新的迭代器)。>>> S = "abc" >>> for x in S: ... for y in S: ... print(x + y, end=" ") aa ab ac ba bb bc ca cb cc