我正在学习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):
这背后的原因是什么?为什么功能改变了这种方式?有这么好的理由吗?
P.S。或者我可能做错了什么。在这里,我一般都在讨论range()函数,它是用于for循环,只是用于创建列表还是用于任何其他目的
答案 0 :(得分:1)
你遗憾地被repr范围误导了:
>>> range(4)
range(0, 4)
它实际上是相同的接口,但现在返回一个懒惰生成的sequence,而不是列表。您可以迭代范围实例以使用值:
>>> list(range(4))
[0, 1, 2, 3]
有关此更改的详细信息,请参阅Python range() and zip() object type。