2013-04-02 65 views
4

虽然Python的工作,我已经看到了两种不同的方式使用范围功能时,我们要建立从0的范围功能正确编码

list=range(10) 
list=range(0,10) 

开始我所知道的名单,如果我们改变0表示另一个数字,输出不同,但在这种情况下,输出完全相同。

我想知道这只是个人决定还是有一些更有意义的使用一种或其他语法(内存,调试等)。

+2

完全偏好。我认为后者更清楚你在做什么,但除非知道比我更多的人可以否则我认为它是相同的。 – squiguy

+0

我能想到的'range(0,10)'唯一的事情是_explicit比implicit_更好,但即使如此,也可能会变得太过分。 – Mariano

+0

我更喜欢第一种情况。简单胜于复杂。 – pydsigner

回答

5

第二种方式没有什么特别之处。我能想到的一个原因是,如果您希望0成为其他地方的持有人 - 即,如果您打算稍后将其更改为其他内容,并且您包括0以表明这一点。除此之外,它只是优先选择。我个人认为,除非你有充分的理由包含0,否则我会坚持range(10)

就像一个笔记一样,您不应该使用list作为变量名称,因为它是一个内置函数。

+0

谢谢,我知道,我只是用它来更加明确的例子 –

1

第二个例子是范围类的更明确的调用。它明确定义了出发点。类似地,可以显式地定义的每个迭代的 '步骤': range(0, 10, 2) --->(0, 2, 4, 6, 8) (参见help(range)在Python解释:其示出了: class range(object) | range([start,] stop[, step]) 其中[开始]及[步骤]是可选的。如你所示,范围(x)将从0开始,并且默认步长为1

由于python 3,范围函数现在与xrange()相同,因为它在每个一步,而不是创建一个列表

1

编程是通信,不只是与计算机通信你想要它做什么,但也沟通给包括你自己在内的人 - 你想要的东西。代码应该有表现力。对我来说,

for i in range(10): 

说“做这个东西10次,实际索引号是不相关的”。

for i in range(0,10): 

说:“为每个数字0到9做这个事情,这些数字实际上代表了某些东西”,这是一个不同的信息。如果我稍后重新访问这段代码,我会更仔细地查看我正在使用该索引号执行的操作,我可能会将其传递给哪些函数,等等。第一种情况下,我可能会用不同的循环结构来重新编码,而没有这样的保留。

1

range的这种行为不是很pythonic - 即。根据参数的数量改变位置参数的含义。

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

就我个人而言,我发现它有点刺耳地读range(0, stop)。当我看到range具有多个参数时,我期望发生一些不寻常的事情,因为一个参数表格更常见。

0

在常规的python代码中,函数定义不能使第一个参数成为可选的(后面的参数不可选)。所以在这个函数中,第一个参数似乎是可选的,它必须运行一些额外的代码来切换参数。

这将意味着range(0,10)range(10)更有效一些,因为它不必运行额外的代码来切换参数。