0.共同点:
都只能单向,从第一个元素进行访问,一直往后
1.迭代器
可以通过列表、元组等创建迭代器
iter() 创建
next()或者for循环 访问
创建
a = [1,2,3,4,5]
it = iter(a)
访问
#方法一:
while True:
try:
# 获得下一个值:
x = next(it)
print(x)
except StopIteration:
# 遇到StopIteration就退出循环
break
#方法二:
for i in it:
print(i)
创建一个类,带有next方法:
self.a 相当于记录了迭代的位置
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 10:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)
2.生成器
创建
# 方法一 : [] ——> ()
f = [x for x in range(5)]
# f 是一个列表
g = (x for x in range(5))
# g 是一个生成器
# 方法二: yield关键字
生成器的功能之一就是 节省内存,用的时候才产生,对比:
# 普通方法:
def test1(num):
n = 0
a = []
while n<num :
a.append(n)
n += 1
# yield关键字
def test2(num):
n = 0
while n<num :
yield n
n += 1
yield后的生成器可以视作一个迭代器,因而,访问方法类似
def test(num):
n = 0
while True:
if n>num:
return
yield n
n += 1
ans = test(5)
while True:
try:
print(next(ans), end=" ")
except StopIteration:
break