在使用Python时,我看到了两种不同的方式来使用range函数,当我们想要从0开始创建列表时。
list=range(10)
list=range(0,10)
我知道如果我们将0更换为另一个数字,输出结果会不同,但在这种情况下,输出结果完全相同。
我想知道是否只是个人决定,还是使用一种或另一种语法有更深层的意义(内存,调试等方面)。
0
成为其他东西的占位符——也就是说,如果你打算稍后将其更改为其他内容,并包括 0
以表示该含义。除此之外,这只是个人喜好。在我个人看来,除非你有充分的理由包括 0
,否则我会坚持使用 range(10)
。list
作为变量名,因为它是一个内置函数。编程就是沟通。不仅是向计算机传达您想要它执行的操作,还包括向人们(包括您自己)传达您的意图。代码应该具有表现力。对我来说,
for i in range(10):
说:“做这件事情10次,实际的索引号并不重要。”
for i in range(0,10):
说“对于0到9的每个数字,做这件事情,那些数字实际上代表着某些东西”,这是一条不同的信息。如果我稍后重新审视这段代码,我会更仔细地看看我在使用那个索引号做了什么,我可能会将其传递给哪些函数等等。第一个情况,我可能会使用不同的循环结构进行重新编码,而没有这样的保留。
range(0, 10, 2)
---> (0, 2, 4, 6, 8)
(在Python解释器中查看help(range)
:其中显示:
class range(object)
| range([start,] stop[, step])
其中[start,]和[, step]是可选的。如您所示,range(x)将从0开始,默认情况下每次步长为1。
自Python 3以来,范围函数现在与xrange()相同,即在每个步骤迭代,而不是创建列表。range
的这种行为不太符合 Pythonic 的风格 - 即根据参数的数量改变位置参数的含义。
然而,每个人都习惯于使用 range(stop)
,因此它永远不会改变。
就个人而言,我发现阅读 range(0, stop)
有点不协调。当我看到有多个参数的 range
时,我期望会发生一些稍微不寻常的事情,因为单参数形式更为常见。
range(0,10)
比range(10)
更有效率,因为它不必运行额外的代码来切换参数。
range(0, 10)
的唯一事情就是 _显式优于隐式_,尽管即使这样也可能走得太远。 - Mariano