1

今天我在学习生成器迭代器等以节省内存,我认为与其将列表转储到内存中更好的是在需要时对它们进行评估,所以我像这样的生成器下面进行了一个简单的测试。

def test(*args):
    for i in args:
        yield i

当我像下面这样使用它时,它会产生预期的效果。

for i in test(range(10)):
    print i

像这样的输出

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

但是这个范围会将所有数字转储到函数中,这会破坏目的,所以我尝试了如下所示的 xrange

for i in test(xrange(10)):
    print i

我得到了这样一个相当令人惊讶的输出

xrange(10)

但是换一种方式看,因为 xrange 只会在迭代时进行评估,所以我尝试强制它这样做

for i in ye(*xrange(10)):
    print i

然后我得到这样的输出

o
1
.
.

有人可以详细解释发生了什么吗

4

1 回答 1

1

在函数定义中使用*需要调用者为函数提供单独的参数。考虑删除它并args直接使用。

于 2013-05-29T11:53:05.610 回答