gpt4 book ai didi

python - xrange 作为迭代器和分块

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:40 26 4
gpt4 key购买 nike

片段

 xi = xrange(10)
zip(xi,xi)

 xi = iter(range(10))
zip(xi,xi)

行为不同。我希望得到

  [(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)]

也在第一个片段中,但它返回

[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)]

相反。似乎隐式容器正在被静默复制。谁能解释这里发生了什么?以及选择这种语义的原因。

>>> sys.version
'2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)]'

最佳答案

xrange 不是任何类型的迭代器。人们一直称它为发电机,但它不是; xrange 是一个不可变的序列,就像一个元组:

>>> x = xrange(5)
>>> x[2]
2
>>> for i in x:
... print i
...
0
1
2
3
4
>>> for i in x:
... print i
...
0
1
2
3
4

与任何其他序列类型一样,每次从 xrange 请求迭代器时,您都会得到一个新的独立迭代器。因此,当你压缩 xrange(10) 本身时,你会得到与压缩 [0, 1, 2, 3, 4, 5, 6, 7, 8 相同的输出, 9] 本身,而不是如果你压缩 iter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 本身。

关于python - xrange 作为迭代器和分块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31067857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com