首页 新闻 会员 周边

Python next的问题

0
[待解决问题]

为什么 对foo()直接使用next方法 不会跳到下一个OK1 ,但是将foo()赋给变量g,对g使用next方法可跳到下一个OK1

程序鸢鼠鼠的主页 程序鸢鼠鼠 | 菜鸟二级 | 园豆:202
提问于:2018-05-17 13:09
< >
分享
所有回答(4)
1

问题描述不清楚,但是我猜你是想问为什么调用3次 next(foo()) 没有输出'ok1',那是因为 foo() 返回一个新的generator对象,这个对象每次next的时候就会停在下一个yield那里,如果不保存到变量里,而是每次生成一个新的对象,那么永远没有机会执行到第二个yield。

Uteki | 园豆:573 (小虾三级) | 2018-05-17 19:05

还是不太明白 为什么next(foo()) 会是返回一个新的generrator 而不是继续执行下一步  foo() 和 变量g 有什么区别呢? 

支持(0) 反对(0) 程序鸢鼠鼠 | 园豆:202 (菜鸟二级) | 2018-05-18 07:34
0

类和实例是同一个东西吗?

Masako | 园豆:1893 (小虾三级) | 2018-05-18 09:24
0

你应该使用next(g),因为每一次函数返回的对象都不一样。

随风行云 | 园豆:936 (小虾三级) | 2018-05-19 10:01
1

凡是 带有yield关键字的函数就是生成器。

foo()  只是获取了一个生成器对象,并没有执行。

next(foo())   next 对生成器执行操作,直至遇到yield 停止执行。

你的 每次foo()  只是获取了一个新的生成器(并产生了一个新的名称空间)而已,并没有执行。

正确写法

g = foo()   先获得生成器对象

next(g)    执行生成器对象,直至遇到yield 停止执行

next(g)    机遇上一个操作继续执行,直至再次遇到yield停止执行

 

具体请看:

https://www.cnblogs.com/xiaobaiskill/p/8998714.html#11    欢迎关注

xiaobaiskill | 园豆:1087 (小虾三级) | 2018-05-28 14:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册