Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
zip函数python-奇怪的行为_Python_Python 3.x - Fatal编程技术网

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
方法,这是生成下一项的方法