gpt4 book ai didi

python - 生成器与序列对象

转载 作者:太空狗 更新时间:2023-10-29 18:00:15 33 4
gpt4 key购买 nike

我知道 rangexrange 的区别。
但令我惊讶的是,xrange 不是生成器,而是序列对象

那么有什么区别呢,如何创建一个序列对象,以及何时在生成器上使用它?

最佳答案

xrange 是序列对象的原因是因为它支持 sequence methods interface .例如你可以索引它(这是你不能用普通生成器做的事情):

print xrange(30)[5]  # No Error

换句话说,

  • 如果某事物支持该链接中定义的所有方法,则它是一个序列。
  • 如果它是一个生成器,它可能只支持 couple methods (.next.__next__ 是最重要的)1
  • 还有一个中间区域是“可迭代的”——“可迭代对象”有一个典型的2 定义的__iter__ 方法返回“generator”(带有定义良好的 .next.__next__3 方法)
  • 为了完整起见,您经常会看到人们说“迭代器”,它与生成器非常相似(实现 __iter__,它返回对象本身并具有定义明确的 next 和/或 __next__ 方法)。

更正式的定义可以在 documentation glossary 中找到

1生成器也支持 __iter__ 并简单地返回它们自己。所以从技术上讲,所有生成器也是可迭代对象(和迭代器!),但并非所有可迭代对象(迭代器)都是生成器。
2__len__ + __getitem__ 足以创建评论中指出的可迭代对象。
3__next__是python3.x的方法名

关于python - 生成器与序列对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24499624/

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