(1) yield
生成器其实也是一个迭代器,可以进行迭代,注意的它只可以迭代一次,由于它的值并没有全部放进去内存中,而是在运行过程中生成值,故节约了内存空间。我们可以遍历这个生成器或者使用一个for循环。
下面举一个例子进行说明:
def func(n):
a = b = 1
for i in range(n):
yield a
a, b = b, a + b
for x in func(100):
print(x)
这样子消耗的内存远远比写一个列表进行存储数据占用的内存少,节约了开发的内存资源。
(2) next()函数
next()函数可以依次查看序列的下一个元素,如果查看的元素超出了序列的索引时,则引发StopIteration异常。
下面举个简单的例子说明一下:
def func():
for i in range(5):
yield i
n = func()
print(next(n))
print(next(n))
print(next(n))
print(next(n))
print(next(n))
#报错
print(next(n))
输出结果:
0
1
2
3
4
Traceback (most recent call last):
print(next(n))
StopIteration
(3) iter()函数
iter函数可以将一个可迭代对象转化成迭代器对象,那字符串举例子吧,s = 'pyhton' 如果直接next(s),肯定会报错,报错类型:TypeError: 'str' object is not an iterator。字面上的意思,字符串对象不是迭代器,这时我们需要将字符串转化为迭代器对象。
iter()函数的使用如下:
s = 'python'
s_iter = iter(s)
print(next(s_iter))
print(next(s_iter))
print(next(s_iter))
print(next(s_iter))
print(next(s_iter))
print(next(s_iter))
输出:
p
y
t
h
o
n