今天我学习生成器迭代器等等以节省内存为目的,我认为更好的是将列表转储到内存中,最好让它们在需要时进行评估,这样我就可以像下面的生成器一样进行简单的测试。
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
.
.
有人可以解释详细情况吗
答案 0 :(得分:1)
在函数定义中使用*
需要调用者为函数提供单独的参数。请考虑将其删除并直接使用args
。