如何理解python的生成器?
一、怎样理解生成器呢?
-
刚开始的时候,看到这样的格式python 代码 def generator_test():
for i in range(5):
yield i;
总是容易把它看成是一个函数来理解。就是这种思维方法,让人难以理解它的运作。 -
那应该如何理解呢?我看了看这个generator单词的翻译。
然后,我尝试把generator 理解成一个发电机。
二、做个题
-
看看下面的代码会输出什么? def generator_test():
for i in range(5):
yield i;
def add(n,i):
return n+i;
x=generator_test();
for i in [6,7]:
x = (add(i,j) for j in x);
print(list(x));
答案是:[14,15,16,17,18] -
为啥?
-
要先弄明白发电机最后是什么样的。 最开始的 x 是 generator_test(); 然后循环 i = 6 的情况。 被改成 (add(i,j) for j in generator_test()) 了。这个返回结果还是一个发电机 然后循环 i = 7 的情况 被改成 (add(i,j) for j in (add(i,j) for j in generator_test())) 了,这就是最终这个叫x的发电机的内部构造。 最后循环结束之后,i=7了。 然后你调用 list(x)开始发电: (add(7,j) for j in (add(7,j) for j in generator_test())) 变成类似这样,但是其实有点区别,因为for j in 后面的是发电机,不是列表。 add(7,j) for j in ([7,8,9,10,11]) 然后算出来是: [14,15,16,17,18]
|