正如标题所说,我想知道为什么单参数形式的range
内置函数不接受序列作为其参数。我只能看到积极的一面,所以我想知道我是否遗漏了一些显而易见的东西。在
range(len(somelist))
时输入range(somelist)
,其含义应该是显而易见的所以我的问题是(请不要仅仅发泄意见)
range(len(x))
?在可选(如果有人碰巧知道)
arange_like
或{编辑:我本希望这不是必要的,但显然是错误的。所以请让我澄清一下:这根本不是一个关于range
是善还是恶的问题。为了争论,让我们接受它是语言的一部分,并从中吸取教训。
实际上,这种情况只会“经常”发生在新的Python用户身上。但迟早你应该学会不那样做。使用索引循环很容易因一个错误而关闭。正确的python方法是
for item in somelist
,如@MSeifert的答案所示。在我个人认为这不是一个有力的论据。在传统的C/C++符号中,我们总是做{{CD2}}。这是括号嵌套的一个级别,人们对此很满意。所以Python的
len(somelist)
同样正常。{cd4>显然需要一个整数来表示。考虑到这个设计契约,用整数以外的任何东西调用range(…)很可能是一个bug。因此,静默地将输入转换为一个整数会使这个错误在早期阶段更难被注意到。(注:我也被其他语言的类似演员给咬了一口,但这不是话题。)由于标准范围(…)已经设计为不接受列表,所以是的,您可以始终重写它以添加范围(somelist)行为,而不破坏现有代码。这是你的选择。在
另外,您知道}都是有效的但却意味着不同的观点。在
range(...)
也接受多个输入参数吗?range(stop)
,range(start, stop)
,range(start, stop, step)
。我不喜欢range(1, 10, 2)
和{可能没有。但话说回来,你不应该经常需要这个。我发现自己只有在写一些关于算法练习的“学术代码”时才会这样做。在
定义一个接受列表输入的函数很简单:
如果像这样的实用程序函数使代码清晰,请使用它。时间成本可以忽略不计。在
numpy
甚至比核心Python更多的是有很多小函数,它们只是根据一个或多个用户组的习惯来优化输入。在因为您可以不使用
range
对序列进行迭代:如果还需要索引,请使用
^{pr2}$enumerate
:如果要组合两个或更多序列,请使用}:
zip
或{所以实际上(几乎)从来没有理由去做
range(len(a))
,那么为什么要为此添加一个快捷方式呢?在根据Python Zen:
相关问题 更多 >
编程相关推荐