码迷,mamicode.com
首页 > 编程语言 > 详细

Python【每日一问】11

时间:2019-04-23 13:00:47      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:停止   生成   def   nbsp   div   打印   直接   赋值   三次   

问:

请简单说明一下以下代码的执行过程以及最终的输出结果

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:

        yield b
        a, b = b, a + b  # 相当于 t=(b,a+b),a = t[0],b = t[1]
        n = n + 1


f = fib(10)
print("== start ==")
print(f.__next__())
print(f.__next__())
print(f.__next__())

 

代码的执行过程:

# 1.定义fib函数
# 2.将fib函数得到的生成器对象地址赋值给f
# 3.打印"== start =="
# 4.第一次调用__next__方法,fib函数开始执行
# (1)先执行n/a/b的赋值操作
# (2)然后进入while循环
# (3)程序遇到yield,yield返回b的值(此时b为1), yield保存此时的执行情况,程序停止
# (4)故打印输出第一个值 1
# 5.第二次调用__next__方法
# (1)直接从上次__next__程序停止的地方开始执行,即进行“a, b = b, a + b”赋值操作
# 注:a, b = b, a + b 相当于 t=(b,a+b),a = t[0],b = t[1]
# (2)然后执行 n = n+1 操作
# (3)执行 yield语句,yield返回b的值(此时b也为1),yield保存此时的执行情况,程序停止
# (4)故打印输出的第二个值 1
# 5.第三次调用__next__方法
# (1)直接从上次__next__程序停止的地方开始执行,即进行“a, b = b, a + b”赋值操作
# 注:a, b = b, a + b 相当于 t=(b,a+b),a = t[0],b = t[1]
# (2)然后执行 n = n+1 操作
# (3)执行 yield语句,yield返回b的值(此时b为2)
# (4)故打印输出的第三个值 2

 

执行结果:

== start ==
1
1
2

 

Python【每日一问】11

标签:停止   生成   def   nbsp   div   打印   直接   赋值   三次   

原文地址:https://www.cnblogs.com/ElegantSmile/p/10755647.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!