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