在Python3中删除range()函数的start和step的默认值的原因是什么?

在Python3中删除range()函数的start和step的默认值的原因是什么?,python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,我正在学习Python3,正如我在过去所看到的,使用Python2,只需传递一个参数,即列表中列表的最后一个数+1,就可以创建一个带有range()的数字列表: range(4) # == [0, 1, 2, 3] start和step的值默认为0和1 但在Python3中,出于某种原因,不可能再忽略这两个参数,为了得到相同的结果,我们需要将range()函数包装为list()函数: range(0, 4, 1) # == range(0, 4) range(4) # == range(0,

我正在学习Python3,正如我在过去所看到的,使用Python2,只需传递一个参数,即列表中列表的最后一个数+1,就可以创建一个带有range()的数字列表:

range(4) # == [0, 1, 2, 3]
start
step
的值默认为0和1

但在Python3中,出于某种原因,不可能再忽略这两个参数,为了得到相同的结果,我们需要将range()函数包装为list()函数:

range(0, 4, 1) # == range(0, 4)
range(4) # == range(0, 4)
list(range(4)) # == [0, 1, 2, 3]
问题:
这背后的原因是什么?为什么功能会这样改变?有什么好的理由吗


另外,也许我做错了什么。在这里,我谈论的是range()函数,不管它是用于for循环,还是仅仅用于创建列表,还是用于任何其他目的

不幸的是,您被range的定义误导了:

>>> range(4)
range(0, 4)
它实际上是同一个接口,但它返回的是一个延迟生成的列表,而不是一个列表。您可以迭代范围实例以使用以下值:

>>> list(range(4))
[0, 1, 2, 3]

有关此更改的详细信息,请参阅

这与你忽略哪些论点无关<代码>范围(0,4,1)和
范围(4)
仍然是等效的;它们不再生成列表。您确定在Python 3中为
范围(0,4,1)
获得
[0,1,2,3]
?如果是这样的话,你能报告确切的版本吗?我投票决定以“不可复制”结束。如果有人能够在Python 3中重现不同的行为,我可以收回我的投票。@ayhan谢谢你的评论,我已经编辑了帖子P2和P3之间的
range
。具体是什么还不清楚range与P2中的
xrange
采用与P2
range
相同的参数。它们只是不返回
列表
。如果执行
范围(0,4,1)
,您是否看到
[0,1,2,3]
?非常正确,但这如何回答(困惑的)问题?如果是的话,那么它就是一个复制品。它通过指出一个错误的前提来回答问题。我仍然不同意:这个问题是混乱的。不管怎样。@wim谢谢你!