|
50鱼币
本帖最后由 毛毛不爱读书 于 2020-5-24 21:10 编辑
正在学习生成器, 无法理解以下代码的运行结果:
- def test():
- for i in range(4):
- yield i
- g = test()
- for n in [2, 10]:
- g = (n+i for i in g)
- print(list(g))
复制代码
其运行结果:
---------------
改动一下代码, 结果又不一样:
- def test():
- for i in range(4):
- yield i
- g = test()
- g = (2 + i for i in g)
- g = (10 + i for i in g)
- print(list(g))
复制代码
其运行结果为:
-------------
主要无法理解第一个代码, 后面那个的还能想明白.
本帖最后由 jinlovelive 于 2020-5-24 22:22 编辑
试了下,应该是生成器赋值的问题,在你的例子中会赋值两次,形成g = (n+i for i in (n+i for i in g)),n的取值最后会循环最后的值(这里是10)。然后list调用生成函数后,会把n=10带入赋值公式,最后就会得到[20,21,22,23]这个数据
看大佬解释
|
最佳答案
查看完整内容
试了下,应该是生成器赋值的问题,在你的例子中会赋值两次,形成g = (n+i for i in (n+i for i in g)),n的取值最后会循环最后的值(这里是10)。然后list调用生成函数后,会把n=10带入赋值公式,最后就会得到[20,21,22,23]这个数据
看大佬解释
|