老师,这样如果直接调用tell().next()为什么一直是a呢?
来源:3-17 Generator

沧海的雨季
2019-04-19
这里是什么原理?
写回答
1回答
-
刚看视频弹出你的问题,看老师没回复,冒然试之:生成器函数有个特点,当你调用函数的时候,相当于说是启动了这个生成器函数,但是因为Generator函数有一个特点,它是惰性求值的,当调用这个函数的时候,也就是你执行tell() 的时候,因为有yiled的存在,函数当前的状态是 <suspended>(暂停的意思),需要你去通过next()方法手动执行下一步!这本没有错!
但是因为,你直接用这个tell()函数调用直接去执行一下步,那么它会认为你是频繁的重复这一动作,所以每次求的值都是a,第二次 它以为你又在开始重新启动再调用这个函数的下一步,所以这里需要一个变量,把启动以后的状态,缓存到一个变量,然后去调用这个变量的next(),因为这时候变量已经缓存了你启动调用的那个生成器函数,再执行next()方法的时候,就是再上一步的基础上继续执行,这样就能得到你想要的值,就相当于手动的执行了iteraotr!
不知道我这么描述你是否清楚,如有不解之处,咱再互相交流学习!
022019-04-20
相似问题