(推荐操作系统:windows7系统、Python 3.9.1、DELL G3电脑。)
请注意,在生成器已经执行时调用下面的任何生成器方法都会引发 ValueError 异常。
1、__next__
从最后一个 yield 语句开始执行生成器或继续执行。使用该方法继续时(注意是继续而不是第一次执行),当前yield的返回值为None,yield语句后的表达式结果直到下一次yield才会返回给调用者语句被执行。经过。迭代器结束时会引发 StopIteration 异常。
该方法会被 for 以及内置函数 next 隐式的调用。
2、send
继续执行生成器(注意是继续,而不是第一次执行),并向生成器函数发送一个值。 send方法的参数是下一个yield语句的返回值,前提是它传递的参数是提前在yield语句中接收到的。如果这个方法用于启动(即第一次执行)生成器,它必须使用 None 作为它的参数,因为还没有 yield 能够接收到它的值(毕竟接收到值的语句还没有开始执行)。
def fn():
a = 0
while True:
a += 1
r = yield # r 就是接收 send 参数的变量
print('{} => {}'.format(a, r))
>>> f = fn()
>>> f.send('a') # 不传递 None 的后果
Traceback (most recent call last):
File "/opt/python3/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2910, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-31-6f758a7cad28>", line 1, in <module>
f.send('a')
TypeError: can't send non-None value to a just-started generator
>>> next(f) # 也可以不传递 None 而是使用 next 执行,两种方式都可以
>>> f.send('a')
1 => a
>>> f.send('b')
2 => b
以上就是python生成器调用方法引发异常,希望能对大家有所帮助。
更多Python学习指路
:
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python3 os如何返回当前目录?12/03
- ♥ 如何使用python线程启动和运行方法?12/13
- ♥ Python异常处理中try和except用法详解09/07
- ♥ 如何连接python自动运维01/12
- ♥ python如何获取系统内存使用信息08/29
- ♥ python如何在数据库中传输数据10/18
内容反馈