生成器函数代码:

 1 def gen(n):
 2     i = 1;
 3     sum = 0;
 4     while i <= n:
 5         '''
 6         方法体1 -- sum求和是1到9的和
 7         yield sum
 8         sum += i
 9         i += 1
10        '''
11         '''方法体2-- sum求和是1到10的和'''
12         sum += i
13         i += 1
14         yield sum
15     else:
16         print("sum completed!")
View Code

调用代码:

1 it = gen(10) #获取一个迭代器
2 while True:
3     print(next(it))
4 else:
5     print("next completed!")
View Code

 

过程分析:

#执行流程分析:
#### it = gen(10) 实际上返回的是一个迭代器,不会执行gen函数
#### 迭代器虽然多次执行,但是gen函数只会执行一次
# test中while循环中 print(next(it))每执行一次,对应到gen(n)函数中 yield sum语句则停止,后面的语句就停止执行,实际gen(n)上这次的循环没有执行完,
# 这时候返回的值就是sum的值会被打印出来;
# 第二次再执行print(next(it))语句,会接着上次yield sum语句处执行下面的 sum += i语句然后再执行到下次循环的yield sum语句停止,
# 同时这时候返回的值也是sum的值同样会被打印出来;

方法体1执行的最后流程:
#当i = 9, 执行next(it), sum实际值为 1 到 8 的和(即是打印的值),next(it)执行完毕后 i= 10, sum实际值为 1 到 9的和
#当i = 10, 执行next(it), sum实际值为 1 到 9 的和(即是打印的值),next(it)执行完毕后 i= 11, sum实际值为 1 到 10的和
#当i = 11, gen函数不会继续执行,条件不满足
posted on 2018-04-11 16:45  人生一世,草木一秋。  阅读(168)  评论(0编辑  收藏  举报