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) 实际上生成的是从
0
到5
的整数序列(不包含6
)。 -
print(range(6)) 输出的range(0, 6) 是对这个范围对象的描述,而不是它的内容。
案例2
从上面的代码可以看到:
-
print(r) 输出的是 range(0, 6),这只是 range 对象的表示方式。
-
当我们用 list(r) 将其转换为列表时,实际内容是[0, 1, 2, 3, 4, 5],确实不包含
6
。
案例3
-
range 是一个可迭代对象,它不会一次性生成所有的数字,而是根据需要动态生成。
-
当你调用 list(range(1, 6)) 时,list() 函数会逐个迭代 range 对象中的元素,并将它们添加到列表中。
-
具体步骤如下:
-
range(1, 6) 生成一个从 1 到 5 的整数序列。
-
list() 函数通过迭代器逐个获取这些整数。
-
每次迭代获取一个整数,并将其添加到新创建的列表中。
-
当所有整数都被迭代完成后,返回最终的列表。
-
案例4
这里的list(range(1, 6, 2)) 的具体步骤如下:
-
range(1, 6, 2) 生成一个从1 开始到 5 结束(不包含
6
)的整数序列,步长为2
。 -
list() 函数通过迭代器逐个获取这些整数。
-
每次迭代获取一个整数,并将其添加到新创建的列表中。
-
当所有整数都被迭代完成后,返回最终的列表。
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 协助创作)