鱼C论坛

 找回密码
 立即注册
查看: 585|回复: 2

[已解决]生成器起始相关的问题

[复制链接]
发表于 2019-7-28 17:57:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
网上搜索学习生成器send函数相关的内容时,有这么一段代码:

  1. def func(n):
  2.         for i in range(n):
  3.                 arg = yield i
  4.                 print('func:', arg)

  5. f = func(10)
  6. while True:
  7.         print('main:', next(f))
  8.         print('main:', f.send(100))
  9.         print('-----------')
复制代码


运行结果:

  1. main: 0
  2. func: 100
  3. main: 1
  4. -----------
  5. func: None
  6. main: 2
  7. func: 100
  8. main: 3
  9. -----------
  10. func: None
  11. main: 4
  12. func: 100
  13. main: 5
  14. -----------
  15. func: None
  16. main: 6
  17. func: 100
  18. main: 7
  19. -----------
  20. func: None
  21. main: 8
  22. func: 100
  23. main: 9
  24. -----------
  25. func: None
  26. Traceback (most recent call last):
  27.   File "<pyshell#22>", line 2, in <module>
  28.     print('main:', next(f))
  29. StopIteration
复制代码


运行结果里,个人对于第一次while循环(生成器起始时)的结果一直疑惑不解:为何不是跟后面第二次while循环之后一样,在'main: 0'之前出现一行'func: None'的运行结果呢?这时arg的值应该就是None吧?如果不是None或者就是arg没赋值定义的状态,那感觉应该是要报错的啊?为啥运行结果就是目前的这个状态呢?求大佬解惑~
最佳答案
2019-7-29 11:02:46
send函数可以与生成器通信,第一次循环main函数执行next时,func函数完03行就停止了,接下来main函数调用一次f.send,func函数接收到通信并且得到数据100,执行了后面的代码,在04行输出了func:100,然后for循环到03行执行完又停住了
第二次循环执行next的时候,因为上一次执行完03行停住的,那么这次接着执行,所以又执行一次04行,但这次没有接收send的数据,打印None,然后又for循环,又执行完03行停住,主函数又send,、、、

好了  不知道你是不是更晕了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-29 11:02:46 | 显示全部楼层    本楼为最佳答案   
send函数可以与生成器通信,第一次循环main函数执行next时,func函数完03行就停止了,接下来main函数调用一次f.send,func函数接收到通信并且得到数据100,执行了后面的代码,在04行输出了func:100,然后for循环到03行执行完又停住了
第二次循环执行next的时候,因为上一次执行完03行停住的,那么这次接着执行,所以又执行一次04行,但这次没有接收send的数据,打印None,然后又for循环,又执行完03行停住,主函数又send,、、、

好了  不知道你是不是更晕了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-29 13:58:15 | 显示全部楼层
flamer 发表于 2019-7-29 11:02
send函数可以与生成器通信,第一次循环main函数执行next时,func函数完03行就停止了,接下来main函数调用一 ...

哦,明白了,谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-7 10:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表