Python Query中的生成器

时间:2014-10-01 22:11:18

标签: python

我正在尝试了解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

由于

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)