我想知道为什么这不会引发一个ValueError:为什么在for循环中使用负范围时Python不会抛出ValueError?
>>> for i in range(-1):
... print "something"
...
>>>
有没有以这种方式使用该负的参数有什么用处?
我想知道为什么这不会引发一个ValueError:为什么在for循环中使用负范围时Python不会抛出ValueError?
>>> for i in range(-1):
... print "something"
...
>>>
有没有以这种方式使用该负的参数有什么用处?
范围可以接受负一步,也
In [2]: list(range(0, -10, -1))
Out[2]: [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
且不说负数的正步进范围。
In [3]: list(range(-9, 1))
Out[3]: [-9, -8, -7, -6, -5, -4, -3, -2, -1, 0]
至于为什么它不会对一个负参数版本抛出一个错误,我认为这只是禅
Special cases aren't special enough to break the rules.
默认情况下,range
功能从0开始。此外,该步骤默认为正1。您仅为函数(停止点)提供了一个参数,并且该参数为-1
。因此,它试图将增量从0到-1。
查看range()
If the start argument is omitted, it defaults to 0.
文档如果你愿意去负,你需要包括start
,stop
和step
值:
range(0, -10, -1)
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
没有抛出异常,因为它是按照文档描述的那样行事。
'range(-1)'是一个空列表。你*可以*迭代一个空列表,但它不会循环。 – Selcuk 2015-02-11 15:01:51