我正在尝试了解Generators并遇到以下代码:
def reverse(data):
for index in range(len(data)-1, -1, -1):
yield data[index]
for s in reverse([1,2,3]):
print s
我知道我们从索引2
开始,递减1
并以-1
结束。我不知道的是,我认为停靠点-1
应该引用"3"
,但它似乎在这里引用"1"
? :
3
2
1
由于
答案 0 :(得分:1)
请参阅https://docs.python.org/2/library/functions.html#range以了解范围的工作原理。我可以看到,阅读文档可能最初令人困惑,但希望我的解释如下,对你的情况有帮助。
具体来自以上文档的这些行回答了您的问题:
'完整表单返回普通整数列表[start, start + step, start + 2 * step, ...]
。如果step为正数,则最后一个元素是最小start + i * step
小于 stop ;如果step为负数,则最后一个元素是最小start + i * step
大于 stop '
在您的情况下start=2
(len(数据)-1), stop =-l and step=-1
。因此,潜在的整数列表为[2, 2-1, 2-2*1, 2-3*1 ...]
,即[2,1,0,-1 ...]
。但是,由于您的步骤是负数,即-1,因此最后一个元素(<{1}})大于 stop 。在潜在列表中,大于停止的最小项目,即大于-1为0.因此start + i*step
返回range(len(data)-1, -1, -1)