您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么python生成器只能使用一次?

为什么python生成器只能使用一次?

生成器的工作原理类似于自动收报机磁带。调用next它时,它会为您提供下一个号码,但与列表不同,它会 忘记 它。这就是大多数效率的来源。由于它不必记住以前的值,因此内存占用空间要小得多(尤其是当最终并非所有值都需要时!)

也许可以重置某些生成器以使其再次运行,但这绝不能保证,如果您尝试这样做,某些生成器将彻底失败。Python不是 语言,因此您可能会有生成器在生成值时修改状态。例如,生成器例如:

def gimme_randoms():
    while True:
        yield random.random()

我可以称之为一堆,但是PRNG背后的状态random每次都会改变。

rs = gimme_randoms()
a = next(rs)
b = next(rs)
c = next(rs)  # some numbers

重置此状态意味着什么?好吧,您期望:

rs2 = gimme_randoms()
x = next(rs2)
y = next(rs2)
z = next(rs2)

assert a == x and b == y and c == z  # Nonsense!

为了保持这种状态,您必须跟踪PRNG的初始状态,然后有办法将其种子设置回初始状态。这当然是 可行的 ,但是知道其底层实现如何修改状态不是生成器的工作

python 2022/1/1 18:36:58 有230人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶