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

Nik*_*iou -1 python range python-2.x lazy-evaluation python-3.x

我正在查看该range功能,在线搜索显示(编辑:在2.x),它是热切评估

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)

但是当我在我的本地Python3.3解释器中尝试下面的代码时

a = range(10)
print(a)
Run Code Online (Sandbox Code Playgroud)

我得到一个输出

range(0, 10)
Run Code Online (Sandbox Code Playgroud)

这是我对懒惰评估函数的期望,是什么情况?

注意:在Python2.7中,它始终表现为热切评估.

Bre*_*arn 9

Python 2和3之间的行为发生了变化.在Python 2中,它创建了一个列表,因此它得到了有效的评估.在Python 3中,它创建了一个范围对象,其各个值被懒惰地评估.

在Python 2中,xrange提供了一个懒惰版本range.在Python 3中,如果要强制将整个惰性对象评估为真实列表,则可以执行此操作list(range(10)).