Python 生成器(yield)
生活随笔
收集整理的这篇文章主要介绍了
Python 生成器(yield)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
Python 生成器
一、生成器(generator)
- Python 的生成器是一种特殊的程序,可以被用作控制循环的迭代行为。生成器可以暂时挂起函数,并保留函数的局部变量等数据,然后在再次调用它的时候,从上次暂停的位置继续执行下去。
- 如果所要的序列的元素可以按照某种算法推算出来,可以采用迭代器一边循环一边计算的机制,这样就不必创建完整的序列,从而节省大量的空间。
- Python 的生成器是迭代器的一种。
- 协程是基于生成器实现的。
二、基于列表生成式的生成器
1、创建生成器:列表生成式的 [ ] 改成 ( )
# 创建一个生成器,查看其类型 g = (x * x for x in range(5)) print(g) >>> <generator object <genexpr> at 0x00000173441AB2B0>2、使用生成器:next()
每次调用next(g),就计算出生成器g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误
# 获得生成器的下一个值 next(g) >>> 0 next(g) >>> 1 ...... next(g) >>> Traceback (most recent call last):File "<stdin>", line 1, in <module>StopIteration# 遍历生成器 for n in g:print(n) >>> 0 1 4 9 16三、yield 生成器
1、创建生成器:yield
# 创建一个生成器,查看其类型 def f(n):i = 0while i < n:yield i**2i += 1return 'finish'g = f(5) print(g) >>> <generator object f at 0x000001F73626B2B0>2、使用生成器:next()
# 遍历生成器 while True:try:x = next(g)print(x)except StopIteration as e:print('Generator return value:', e.value)break >>> 0 1 4 9 16Generator return value: finish3、生成器传递参数:send()
- yield 语句执行返回操作后会马上挂起,等待接收值。send() 值时会马上进行赋值,如果没有接收者,会执行代码直至 yield 语句。
- 启动生成器:.send(None),第一次使用 send(),这时候没有 yield 接收值,执行函数的初始化代码,直到 yield 语句,返回 yield 后面的值(语句的赋值操作没有执行),生成器挂起。
- 生成器再次传递值:.send(n),生成器会先接收值 n 赋值给 yield 语句的变量,然后执行 yield 语句之后的代码,直至遇到下一个 yield 语句把 yield 后面的值返回给调用者,生成器再次挂起,等待接收值。
GOOD LUCK!
总结
以上是生活随笔为你收集整理的Python 生成器(yield)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: python 多进程和多线程
- 下一篇: Python 网络编程(Socket)