【问题标题】:What is the return value of the range() function in python?python中range()函数的返回值是多少?
【发布时间】:2017-10-02 05:37:41
【问题描述】:

我认为 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]

谁能给我解释一下?

提前致谢!

【问题讨论】:

    标签: python python-3.x range python-3.5


    【解决方案1】:

    您正在阅读的书可能使用 Python 2,其中range 返回一个列表。

    在 Python 3 中,range 改为返回 immutable sequence type

    【讨论】:

      【解决方案2】:

      您的书可能是使用 Python 2.x 编写的。在 Python 2.x 中,range 函数实际上返回了一个 for 循环将遍历的列表。在 Python 3.x 中,range 函数是它自己的类型,实际上是一个生成器函数,因此数字是在 for 循环执行时动态生成的。

      如果您将范围函数传递给这样的列表,您仍然可以从范围函数创建列表。

      list(range(4))
      

      这将输出一个包含以下内容的列表。

      [0,1,2,3]
      

      【讨论】:

      • range 对象不是生成器,甚至也不是迭代器。
      【解决方案3】:

      print(range(10)) 返回 range(0, 10) 作为输出

      range() 返回的对象在许多方面表现得好像它是一个列表,但实际上它不是。它是一个对象,当您对其进行迭代时,它会返回所需序列的连续项,但它并没有真正构成列表,因此节省了空间。

      我们说这样的对象是可迭代的,也就是说,适合作为函数和构造的目标,这些函数和构造期望从中获得连续的项目,直到供应耗尽。我们已经看到 for 语句就是这样一个迭代器。函数 list() 是另一个;它从可迭代对象创建列表:

      list(range(5)) 返回 [0, 1, 2, 3, 4] 作为输出

      【讨论】:

        【解决方案4】:

        range(a, b) 返回类range 的实例。您可以通过print(type(range(1, 5)))查看。

        您所期望的可以通过print(list(range(a, b)))得到。

        【讨论】:

          【解决方案5】:

          根据this

          所以在 Python 3.x 中,range() 函数有自己的类型。基本上,如果您想在 for 循环中使用 range(),那么您就可以开始了。但是,您不能将它纯粹用作列表对象。例如,您不能对范围类型进行切片。

          但是,如果您在其上调用print()print 函数将尝试创建范围对象的字符串表示,并且此字符串表示等效于列表的字符串表示。

          如果你想要这个列表,你可以list(range(<parameters>))

          【讨论】:

          • 那个链接是错误的。实际上,您可以range 对象进行切片。 range 对象是不可变的序列类型。
          猜你喜欢
          • 2015-01-07
          • 1970-01-01
          • 2016-10-28
          • 2012-02-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-24
          相关资源
          最近更新 更多