菜鸟学PythonPython中文社区

python中的生成器

2020-02-28  本文已影响0人  追光的焕焕

(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
上一篇 下一篇

猜你喜欢

热点阅读