range函数的正确编码方法

4
在使用Python时,我看到了两种不同的方式来使用range函数,当我们想要从0开始创建列表时。
list=range(10)
list=range(0,10)

我知道如果我们将0更换为另一个数字,输出结果会不同,但在这种情况下,输出结果完全相同。

我想知道是否只是个人决定,还是使用一种或另一种语法有更深层的意义(内存,调试等方面)。


2
完全是个人喜好。我认为后者更清晰表达你的意思,但除非有比我更懂的人能说出不同意见,否则我认为这两种方式是一样的。 - squiguy
我能想到的关于 range(0, 10) 的唯一事情就是 _显式优于隐式_,尽管即使这样也可能走得太远。 - Mariano
我更喜欢第一种情况。简单胜于复杂。 - pydsigner
5个回答

5
第二种方法并没有什么特别之处。我能想到的一个原因是,如果你想让 0 成为其他东西的占位符——也就是说,如果你打算稍后将其更改为其他内容,并包括 0 以表示该含义。除此之外,这只是个人喜好。在我个人看来,除非你有充分的理由包括 0,否则我会坚持使用 range(10)
另外需要注意的是,永远不要使用 list 作为变量名,因为它是一个内置函数。

谢谢,我知道,我只是用它来更明确地说明例子。 - Leon palafox

1

编程就是沟通。不仅是向计算机传达您想要它执行的操作,还包括向人们(包括您自己)传达您的意图。代码应该具有表现力。对我来说,

for i in range(10):

说:“做这件事情10次,实际的索引号并不重要。”

for i in range(0,10):

说“对于0到9的每个数字,做这件事情,那些数字实际上代表着某些东西”,这是一条不同的信息。如果我稍后重新审视这段代码,我会更仔细地看看我在使用那个索引号做了什么,我可能会将其传递给哪些函数等等。第一个情况,我可能会使用不同的循环结构进行重新编码,而没有这样的保留。


1
第二个例子是更明确地调用范围类。它明确定义了起始点。同样,您可以明确地定义每次迭代的“步骤”: 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()相同,即在每个步骤迭代,而不是创建列表。

1
< p > range 的这种行为不太符合 Pythonic 的风格 - 即根据参数的数量改变位置参数的含义。

然而,每个人都习惯于使用 range(stop),因此它永远不会改变。

就个人而言,我发现阅读 range(0, stop) 有点不协调。当我看到有多个参数的 range 时,我期望会发生一些稍微不寻常的事情,因为单参数形式更为常见。


0
在常规的Python代码中,函数定义不能使第一个参数可选(后面的参数不可选)。因此,在这个函数中,第一个参数似乎是可选的,它必须运行一些额外的代码来切换参数。
这意味着range(0,10)range(10)更有效率,因为它不必运行额外的代码来切换参数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接