zip函数python-奇怪的行为
下面发生的事情有什么解释吗zip函数python-奇怪的行为,python,python-3.x,Python,Python 3.x,下面发生的事情有什么解释吗 >>> foo = [10, 20] >>> bar = [30, 40] >>> foobar = zip(foo, bar) >>> list(foobar) [(10, 30), (20, 40)] >>> tuple(foobar) () >>> list(foobar) [] >>> foobar <zip object
>>> foo = [10, 20]
>>> bar = [30, 40]
>>> foobar = zip(foo, bar)
>>> list(foobar)
[(10, 30), (20, 40)]
>>> tuple(foobar)
()
>>> list(foobar)
[]
>>> foobar
<zip object at 0x000001198D28E280>
foo=[10,20]
>>>bar=[30,40]
>>>foobar=zip(foo,bar)
>>>列表(foobar)
[(10, 30), (20, 40)]
>>>元组(foobar)
()
>>>列表(foobar)
[]
>>>福巴
尽管foobar
仍然是一个zip对象,但为什么这些输出?zip
是一个对象,并返回一个迭代器。一旦它完成屈服,就是这样
def mygen():
计数=10
计数时:
产量计算
计数-=1
gen_obj=mygen()
打印(列表(gen_obj))
打印(列表(gen_obj))
# [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
# []
您用第一行耗尽了迭代器,现在没有任何东西可以转换为元组。zip
对象实际上不是生成器,但它们是迭代器我相信它实际上是生成器。我想我把术语弄糊涂了。生成器从您的链接返回一个iterable?“zip(*iterables)
:生成一个迭代器来聚合来自每个iterables的元素”我编辑了我的答案以反映这一点。谢谢。@DragonBobZ不,它们不是发电机。所有生成器都是迭代器,但并非所有迭代器都是生成器。你可以迭代的任何东西都是iterable,包括迭代器,基本上,任何有\uuuuuu iter\uuuu
方法的东西都是iterable。这必须返回一个interator,它本身有一个\uuuu iter\uuuu
方法(只返回self
)和一个\uuu next\uuuu
方法,这是生成下一项的方法