在使用 python 时,当我们想要从 0 开始创建列表时,我已经看到了 2 种不同的方式来使用 range 函数。
list=range(10)
list=range(0,10)
我知道如果我们将 0 更改为另一个数字,则输出会有所不同,但在这种情况下,输出完全相同。
我想知道这是否只是个人决定,还是使用一种或另一种语法(内存、调试等)更有意义。
第二种方式没有什么特别之处。我能想到的一个原因是,如果您希望0
成为其他内容的占位符 - 即,如果您打算稍后将其更改为其他内容,并且您包含0
以表明这一点。除此之外,这只是偏好。在我个人看来,除非你有充分的理由包括.,否则0
我会坚持使用range(10)
.
就像一个注释,你不应该使用list
变量名,因为它是一个内置函数。
第二个示例是对范围类的更显式调用。它明确定义了起点。同样,您可以显式定义每次迭代的“步骤”:
range(0, 10, 2)
---> (0, 2, 4, 6, 8)
(参见help(range)
python 解释器:其中显示:
class range(object)
| range([start,] stop[, step])
其中 [start,] 和 [,step] 是可选的。如您所见, range(x)将从 0 开始,默认按 1 递增。
从 python 3 开始,range 函数现在与以前的 xrange() 相同,因为它在每一步都迭代,而不是创建一个列表。
编程就是交流。不仅要与计算机交流您希望它做什么,还要与包括您自己在内的人交流您的意图。代码应该是富有表现力的。对我来说,
for i in range(10):
说“做这件事 10 次,实际的索引号不相关”。
for i in range(0,10):
说“为 0 到 9 的每个数字做这件事,这些数字实际上代表了一些东西”,这是一条不同的信息。如果我稍后重新访问这段代码,我会更仔细地查看我对那个索引号做了什么,我可以将它传递给什么函数,等等。第一种情况我可能会使用不同的循环结构重新编码,而无需此类保留。
这种行为range
不是很 Pythonic - 即。根据参数的数量改变位置参数的含义。
然而,每个人都习惯使用range(stop)
它,它永远不会改变。
我个人觉得读起来有些刺耳range(0, stop)
。当我看到range
多个参数时,我预计会发生一些不寻常的事情,因为一个参数形式更为常见。
在常规 python 代码中,函数定义不能使第一个参数成为可选的(后面的参数不是可选的)。所以在这个函数中,第一个参数似乎是可选的,它必须运行一些额外的代码来切换参数。
这意味着它range(0,10)
比 更有效range(10)
,因为它不必运行额外的代码来切换参数。