感谢!你讲的跟我理解的一样.实测看来也确实如此,next()就是在上一个动作的基础上再
动作一次,该是none就是none,该是别的就是别的.
我没能理解的下面这句话其实是来自
https://docs.python.org/zh-cn/3/reference/expressions.html#yieldexpr
也许,它说的next()返回None,是预先假设叮当包的口袋里只有一件宝贝,执行过一次之后
再执行,就是None了吧...
The value of the yield expression after resuming depends on the method which
resumed the execution. If __next__() is used (typically via either a for or
the next() builtin) then the result is None. Otherwise, if send() is used,
then the result will be the value passed in to that method.
【 在 pseudo 的大作中提到: 】
: yield是产出的意思,含yield的fab构成了一个生成器函数,向调用方发射值,函数执行到yield的地方就卡在那里,把yield右边的表达式的值发射回调用方,同时还保留了现场,下次还能回来,从yield左边接受值,接着往下走。生成器函数作为函数也是有返回值的,不要把刚才yield的值
: 和return的返回值搞混!返回值跟普通函数是一样的,用return返回,你的fab函数有一个默认的隐藏返回值,就是在while跳出之后啥也没有了,按python的规矩就是return None,但这个返回值的获取跟普通函数不一样。不断next将生成器耗尽之后,就是不再yield东西了,在你的例子里
: 褪翘鲅诽澹飧龇祷刂礜one就要登台了,但此时生成器会抛出StopIteration异常,把返回值None做进异常里,你需要在外面处理这个异常才能拿到这个返回值。你的例子里三次next之后,再来一次next就会看到StopIteration,但这个None一般不打印出来,所以你感觉不到。你要是在
: ...................
--
FROM 118.212.215.*