我有一个方法def winnings(right, altright):
altcorrect = False
# ...
elif right == 4:
if altcorrect:
return 45
# maybe add an else here?
# or if you get to this point, _always_ return 0
return 0
,我试图在我的脚本中运行。
该方法是在脚本的基础上调用的,但是似乎没有任何执行。
我已经在调试中放置了play_lottery()
行,我什至看不到执行到此为止。
有什么想法吗?
这是在OSX上运行的print 10
。
Python 2.7.10
答案 0 :(得分:1)
调用生成器函数将创建一个生成器对象。但是,您实际上从未真正向生成器请求任何内容,因此它不会运行。
您需要从生成器中请求值:
import itertools
lot_gen = play_lottery()
# Take the first 3
vals = list(itertools.islice(lot_gen, 3))
这至少会使您的发电机运行。
您不必使用islice
。您只需要通过某种方式向生成器请求值。
答案 1 :(得分:1)
您创建的是python生成器,因为yield关键字用于辅助功能。 python中的生成器是内存友好的。除非您在生成器上调用 next 方法,直到 StopIteration
,生成器才会执行这里的代码看起来不错。您所要做的就是以下任何一种。首先将生成器放入变量
play_lottery_gen = play_lottery()
现在您可以使用next方法检索下一个值
play_lottery_gen.next()
或者,您也可以内置方法 next 来检索下一个值
next(play_lottery_gen)
您只需将生成器传递到 list 工厂函数即可将其转换为列表。但这是内存不足
list(play_lottery_gen)