Trouble understanding python generators
本问题已经有最佳答案,请猛点这里访问。
我对python中的生成器不熟悉。我有一个足够简单的代码,我正在玩,但我不能理解输出我从中得到。这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def do_gen(): for i in range(3): yield i def incr_gen(y): return y + 1 def print_gen(x): for i in x: print i x = do_gen() y = (incr_gen(i) for i in x) print_gen(x) print_gen(y) |
我希望我的输出是这样的:
1 2 | 0 1 2 1 2 3 |
但我只看到:0 1 1
我不理解这个输出。有人能帮我解决我的不理解吗?事先谢谢。
生成器(和所有iterables一样)只能迭代一次。到
这工作:
1 2 3 4 | x = do_gen() y = (incr_gen(i) for i in do_gen()) print_gen(x) print_gen(y) |
这样就产生了两个独立的发电机。在您的版本中,分配给
当您依次使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | >>> def do_gen(): ... for i in range(3): ... yield i ... >>> def incr_gen(y): ... return y + 1 ... >>> x = do_gen() >>> y = (incr_gen(i) for i in x) >>> next(x) # first value for the range 0 >>> next(y) # second value from the range, plus 1 2 >>> next(x) # third value from the range 2 >>> next(y) # no more values available, generator done Traceback (most recent call last): File"<stdin>", line 1, in <module> StopIteration |
注意,这里也提到了