> 技术文档 > Python中的内置函数range()_python range

Python中的内置函数range()_python range


知识点

range 是 Python 中的一个内置类型,用于生成一个有序的数字序列。它是一种可迭代对象,通常用于循环中控制迭代次数,也可以用于生成连续的数字序列。

1. range 的构造方法

range 有三种构造方法:

  • range(stop):生成从 0 开始到 stop 结束(不包括 stop )的整数序列。

  • range(start, stop):生成从 start 开始到 stop 结束(不包括 stop )的整数序列。

  • range(start, stop, step):生成从 start 开始到 stop 结束(不包括 stop )的整数序列,步长为 step。

案例1

当运行print(range(6)) 时,输出结果是 range(0, 6),但这并不意味着 6 是 range 的一部分。这里的 range(0, 6) 只是 Python 对 range 对象的表示方式,它表示这是一个从 0 开始到 6 结束(但不包含 6)的范围。

关键点:

  • range(6) 实际上生成的是从 05 的整数序列(不包含 6)。

  • print(range(6)) 输出的range(0, 6) 是对这个范围对象的描述,而不是它的内容。

案例2

从上面的代码可以看到:

  1. print(r) 输出的是 range(0, 6),这只是 range 对象的表示方式。

  2. 当我们用 list(r) 将其转换为列表时,实际内容是[0, 1, 2, 3, 4, 5],确实不包含 6

案例3

  • range 是一个可迭代对象,它不会一次性生成所有的数字,而是根据需要动态生成。

  • 当你调用 list(range(1, 6)) 时,list() 函数会逐个迭代 range 对象中的元素,并将它们添加到列表中。

  • 具体步骤如下:

    1. range(1, 6) 生成一个从 1 到 5 的整数序列。

    2. list() 函数通过迭代器逐个获取这些整数。

    3. 每次迭代获取一个整数,并将其添加到新创建的列表中。

    4. 当所有整数都被迭代完成后,返回最终的列表。

案例4

这里的list(range(1, 6, 2)) 的具体步骤如下:

  1. range(1, 6, 2) 生成一个从1 开始到 5 结束(不包含 6)的整数序列,步长为 2

  2. list() 函数通过迭代器逐个获取这些整数。

  3. 每次迭代获取一个整数,并将其添加到新创建的列表中。

  4. 当所有整数都被迭代完成后,返回最终的列表。

2. range 的特点

  • 不可变性:range 对象是不可变的,这意味着一旦创建,它的内容不能被修改。

  • 高效性:range 对象在内存中占用的空间非常小,因为它不会一次性生成所有的数字,而是根据需要动态生成。这使得它在处理大量数据时非常高效。

  • 可迭代性:range 是一个可迭代对象,可以用于循环、迭代器等场景。

3. range 如何被 list() 转换为列表

range 是一个可迭代对象,list() 函数可以将任何可迭代对象转换为列表。当 list() 函数作用于 range 对象时,它会逐个迭代 range 中的元素,并将这些元素添加到一个新的列表中。

1. 转换过程

  • range 对象本身不会一次性生成所有的数字,而是根据需要动态生成。

  • 当 list() 函数调用时,它会通过 range 对象的迭代器逐个获取元素。

  • 每次迭代获取一个元素,并将其添加到新创建的列表中。

  • 当 range 对象的所有元素都被迭代完成后, list() 函数返回最终生成的列表。

4. 内部原理

在内部,list() 函数会调用 range 对象的__iter__() 方法来获取一个迭代器。然后,它会通过迭代器的 __next__() 方法逐个获取元素,直到迭代器抛出 StopIteration 异常,表示迭代结束。

5. 注意事项

  • 虽然 range 对象可以被转换为列表,但通常不建议在不需要的情况下将 range 转换为列表,因为这会占用更多的内存。range 对象本身已经非常高效,适合在循环和迭代中直接使用。

  • 如果需要频繁访问 range 中的元素,或者需要对元素进行多次操作,可以考虑将其转换为列表。但在大多数情况下,直接使用 range 对象即可。

(温馨提醒:本篇文章属于AI 协助创作)

海外域名注册