发电机的理解到底是如何工作的?发电机理解是做什么的?它怎麽工作?我找不到关于它的教程。
3 回答

jeck猫
TA贡献1909条经验 获得超7个赞
>>> my_list = [1, 3, 5, 9, 2, 6]>>> filtered_list = [item for item in my_list if item > 3]>>> print filtered_list[5, 9, 6]>>> len(filtered_list)3>>> # compare to generator expression... >>> filtered_gen = (item for item in my_list if item > 3)>>> print filtered_gen # notice it's a generator object<generator object at 0xb7d5e02c>>>> len(filtered_gen) # So technically, it has no lengthTraceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: object of type 'generator' has no len()>>> # We extract each item out individually. We'll do it manually first.... >>> filtered_gen.next()5>>> filtered_gen.next()9>>> filtered_gen.next()6>>> filtered_gen.next() # Should be all out of items and give an errorTraceback (most recent call last): File "<stdin>", line 1, in <module>StopIteration>>> # Yup, the generator is spent. No values for you!... >>> # Let's prove it gives the same results as our list comprehension... >>> filtered_gen = (item for item in my_list if item > 3)>>> gen_to_list = list(filtered_gen)>>> print gen_to_list[5, 9, 6]>>> filtered_list == gen_to_listTrue>>>
next()
__next__()

梵蒂冈之花
TA贡献1900条经验 获得超5个赞
>>> [x**2 for x in range(1,11)][1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
range(1,11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
range
>>> (x**2 for x in xrange(1,11))<generator object at 0x7f0a79273488>
range
添加回答
举报
0/150
提交
取消