生成器函数的 next() 方法,什么情况下是提前调用?为什么提前调用yield会返回None?

来源:9-3 生成器函数的使用

Xiaoyu_Wu

2019-10-21

老师,您好~
今天在学习python 生成器相关知识时,遇到一个不能理解的知识点,生成器有一个next()方法,书里说,当提前调用它时,yield 会返回None,请看下面示例代码:

# -*- coding: utf-8 -*-

def gen():
    for i in range(10):
        x = yield i
        print(x)

G = gen()

print(next(G))  # yield 返回 0
print(next(G))  # yield 返回 None 再打印1
print(next(G))  # yield 返回 None 再打印2
"""
输出如下:
0
None
1
None
2
"""

请问老师,什么是生成器的提前调用?为什么这里会yield返回None?
谢谢~

写回答

1回答

bobby

2019-10-22

你要清楚none是执行哪一行代码生成的 是执行 print(x)生成的,课程中会讲解生成的send方法的,看了就会理解的

0
1
Xiaoyu_Wu
非常感谢!
2019-10-25
共1条回复

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程