我认为range()函数返回一个列表,其中包含放在括号内的参数。但是当我在IDLE中输入range(4)
时,我得到range(0, 4)
作为输出。同样,当我输入print(range(4))
时,我也会得到range(0, 4)
作为输出。我目前正在使用python 3.5。
我目前正在使用以下电子书学习python:“如何像计算机科学家一样思考”,在该电子书中,它们提供了可以运行python代码的活动代码块。当我在那里运行print(range(4))
时,我会得到我期望的列表,即[0, 1, 2, 3]
。
有人可以向我解释一下吗?
提前致谢!
答案 0 :(得分:9)
您正在阅读的书可能使用Python 2,其中range
返回一个列表。
在Python 3中,range
会返回immutable sequence type。
答案 1 :(得分:4)
你的书可能是用Python 2.x编写的。在Python 2.x中,range函数实际上返回了for循环将遍历的列表。在Python 3.x中,范围函数是它自己的类型,并且实际上是一个生成器函数,因此当for循环执行时,数字会立即生成。
如果将范围函数传递给类似的列表,您仍然可以从范围函数创建列表。
list(range(4))
哪个会输出包含以下内容的列表。
[0,1,2,3]
答案 2 :(得分:2)
range(a, b)
返回类range
的实例。您可以print(type(range(1, 5)))
进行检查。
您期望的是print(list(range(a, b)))
。
答案 3 :(得分:1)
print(range(10))返回范围(0,10)作为输出
在很多方面,range()返回的对象的行为就好像它是一个列表,但事实上并非如此。它是一个对象,当你迭代它时会返回所需序列的连续项,但它并没有真正产生列表,从而节省了空间。
我们说这样的对象是可迭代的,也就是说,适合作为函数和构造的目标,这些函数和构造期望在供应耗尽之前可以获得连续项目的东西。我们已经看到for语句就是这样一个迭代器。函数列表()是另一个;它从迭代创建列表:
list(range(5))返回[0,1,2,3,4]作为输出