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

时间:2017-12-19 14:27:24

标签: python python-3.x python-2.7

我正在学习Python3,正如我在过去看到的那样,使用Python2,只需传递一个参数就可以创建一个带有range()的数字列表,这个参数可能是last number of list + 1。列表:

range(4) # == [0, 1, 2, 3]

并且startstep值默认为0和1.

但是在Python3中由于某种原因,不再可能省略这两个参数,并且对于相同的结果,我们需要使用list()函数包装range()函数:

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

问题(S):
这背后的原因是什么?为什么功能改变了这种方式?有这么好的理由吗?

P.S。或者我可能做错了什么。在这里,我一般都在讨论range()函数,它是用于for循环,只是用于创建列表还是用于任何其他目的

1 个答案:

答案 0 :(得分:1)

你遗憾地被repr范围误导了:

>>> range(4)
range(0, 4)

它实际上是相同的接口,但现在返回一个懒惰生成的sequence,而不是列表。您可以迭代范围实例以使用值:

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

有关此更改的详细信息,请参阅Python range() and zip() object type