|
发表于 2023-7-29 12:23:36
|
显示全部楼层
本楼为最佳答案
在这段代码中, return 语句虽然存在于生成器函数 gen() 中,但是由于生成器函数的特性,当使用 for i in gen() 迭代生成器时,生成器函数的执行流程在执行到 return 语句时会直接终止,导致 return 后面的值(即200)无法被获取到或显示出来。在生成器函数中, return 可以被认为是一种终止符,用于结束生成器的迭代。
要显示出 return 后面的值(即200),可以通过捕获生成器的 StopIteration 异常来实现。在 for 循环中使用 try 和 except 块来捕获异常,并在异常块中获取 return 的值。下面是修改后的代码:
- def gen():
- print('Loop1')
- yield 100
- print('Loop2')
- return 200
- gen_obj = gen()
- for i in gen_obj:
- print(i)
- try:
- print(next(gen_obj))
- except StopIteration as e:
- print('return的值是:', e.value)
复制代码
输出结果为:
- Loop1
- 100
- Loop2
- return的值是: 200
复制代码
在修改后的代码中,我们先创建了生成器对象 gen_obj ,然后使用 for 循环迭代生成器获取前面的值(即100),最后通过捕获 StopIteration 异常获取 return 后面的值(即200),从而成功显示出了 return 的值。 |
|