我正在学习Python3,正如我在过去看到的那样,使用Python2,可以通过传递一个参数来创建一个带有range()的数字列表,这个参数将是列表中的last number of list + 1
:
range(4) # == [0, 1, 2, 3]
并且start
和step
值默认为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): 这背后的原因是什么?为什么功能改变了这种方式?这有充分的理由吗?
附:或者我可能做错了什么。这里,我一般都在谈论range()函数,它是用于for循环,只是为了创建一个列表或用于任何其他目的
不幸的是,你被范围内的repr误导了:
>>> range(4)
range(0, 4)
它实际上是相同的接口,但现在返回一个懒惰生成的sequence,而不是列表。您可以迭代范围实例以使用值:
>>> list(range(4))
[0, 1, 2, 3]
有关此更改的更多详细信息,请参阅Python range() and zip() object type。