Python 生成器如何设置和使用

Python 的生成器其实可以理解为一种比较复杂的迭代器。

关于迭代器,可以参考:
Python 迭代器的设置和使用方法

一、代码举例:

def gen(x,y):
    txt = 'I love ' + x
    yield txt
    txt_1 = ', You love ' + y
    yield txt + txt_1

gen_txt = gen('apple','peach')
print(type(gen_txt))
print(next(gen_txt))
print(next(gen_txt))
print(next(gen_txt))

<class 'generator'>
I love apple
I love apple, You love peach
StopIteration

这里和迭代器一样,可以用 next() 一步步执行。

这里叫做生成器函数

第一次执行以后会从第一个 yield 的地方返回结果。

然后再执行 next() ,从跳出的地方继续往下执行到第二个 yield。

二、区别

  1. 和列表表达式区别
for x in (x ** 2 for x in range(5)):
    print(x)

for x in [x ** 2 for x in range(5)]:
    print(x)

a=(x ** 2 for x in range(5))
b=[x ** 2 for x in range(5)]

print(type(a))
print(type(b))

0
1
4
9
16
0
1
4
9
16
<class 'generator'>
<class 'list'>

可以看到我们用元组的形式表示,则为生成器表达式

生成器表达式是对内存空间的优化。他们不需要像方括号的列表解析一样,一次构造出整个结果列表。

列表解析式更快,生成器表达式更省内存!

  1. 和传统函数的差别
def gen_squares(num):
    for x in range(num):
        yield x ** 2

for i in gen_squares(5):
    print(i, end=' ')

0 1 4 9 16 
def sq(num):
    return num**2

for i in range(5):
    print(sq(i), end=' ')

0 1 4 9 16 

传统函数是反复调用。

而生成器函数是挂起,然后迭代继续。

发布了44 篇原创文章 · 获赞 0 · 访问量 1692

猜你喜欢

转载自blog.csdn.net/qq_42067550/article/details/105604302