|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
网上搜索学习生成器send函数相关的内容时,有这么一段代码:
- def func(n):
- for i in range(n):
- arg = yield i
- print('func:', arg)
- f = func(10)
- while True:
- print('main:', next(f))
- print('main:', f.send(100))
- print('-----------')
复制代码
运行结果:
- main: 0
- func: 100
- main: 1
- -----------
- func: None
- main: 2
- func: 100
- main: 3
- -----------
- func: None
- main: 4
- func: 100
- main: 5
- -----------
- func: None
- main: 6
- func: 100
- main: 7
- -----------
- func: None
- main: 8
- func: 100
- main: 9
- -----------
- func: None
- Traceback (most recent call last):
- File "<pyshell#22>", line 2, in <module>
- print('main:', next(f))
- StopIteration
复制代码
运行结果里,个人对于第一次while循环(生成器起始时)的结果一直疑惑不解:为何不是跟后面第二次while循环之后一样,在'main: 0'之前出现一行'func: None'的运行结果呢?这时arg的值应该就是None吧?如果不是None或者就是arg没赋值定义的状态,那感觉应该是要报错的啊?为啥运行结果就是目前的这个状态呢?求大佬解惑~
send函数可以与生成器通信,第一次循环main函数执行next时,func函数完03行就停止了,接下来main函数调用一次f.send,func函数接收到通信并且得到数据100,执行了后面的代码,在04行输出了func:100,然后for循环到03行执行完又停住了
第二次循环执行next的时候,因为上一次执行完03行停住的,那么这次接着执行,所以又执行一次04行,但这次没有接收send的数据,打印None,然后又for循环,又执行完03行停住,主函数又send,、、、
好了 不知道你是不是更晕了
|
|