Python 在2.x和3.x中,范围是否涉及急切或懒惰的评估?

Python 在2.x和3.x中,范围是否涉及急切或懒惰的评估?,python,python-3.x,range,lazy-evaluation,python-2.x,Python,Python 3.x,Range,Lazy Evaluation,Python 2.x,我正在查看range函数,一个在线搜索显示(编辑:在2.x中)它是 但是,当我在本地Python 3.3解释器中尝试下面的代码时 a = range(10) print(a) 我得到一个输出 range(0, 10) 这是我对惰性求值函数的期望,是什么情况? 注意:在Python2.7中,它的行为总是被热切地评估。在Python2和Python3之间,行为发生了变化。在Python2中,它创建了一个列表,因此可以有效地对其进行求值。在Python3中,它创建了一个range对象,对其各个值进

我正在查看
range
函数,一个在线搜索显示(编辑:在2.x中)它是

但是,当我在本地Python 3.3解释器中尝试下面的代码时

a = range(10)
print(a)
我得到一个输出

range(0, 10)
这是我对惰性求值函数的期望,是什么情况?


注意:在Python2.7中,它的行为总是被热切地评估。

在Python2和Python3之间,行为发生了变化。在Python2中,它创建了一个列表,因此可以有效地对其进行求值。在Python3中,它创建了一个range对象,对其各个值进行延迟计算


在Python 2中,
xrange
提供了
range
的惰性版本。在Python3中,如果您想强制将整个惰性对象计算为一个真实的列表,您可以执行
list(范围(10))

与所有事情一样,PyPy中的情况更为奇怪。总之,


具体来说,当python2程序调用
range()
时,返回值的类型为
list
,但其实现实际上更像
types.XRangeType
;在你试图修改它之前,它会创建一个“真实”的列表。

@roippi是吗?你怎么会期望一个主要语言不是Python的人能登上另一篇文章呢?在我的谷歌搜索让我对主题标签、、、、感到困惑之后,我问的是各种编程语言中普遍存在的“渴望”和“懒惰”这两个词,,,。请注意,可能存在版本差异,因此请使用“2.x”/2.7/2.6和“3.x”重新进行关键字搜索,看看是否有任何差异。@NikosAthanasiou:没错,但请稍候。以重复方式结束并不是为了惩罚提问者(重新)询问什么可能是一个完全相关和重要的问题(如本例),而是在一组不同的术语/关键字/标记下。以重复结束纯粹是关于将单个主题上的所有等价问题都指向单个SO资源。(见Meta.SO/.SE了解无休止的争论…@NikosAthanasiou这就是重点;谷歌搜索不适合你的全部原因是没有足够的路标链接(你搜索的术语)和(你正在寻找的答案)。副本用作连接具有正确规范答案的帖子的路标。另请参见
range(0, 10)