标签:停止 生成 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
标签:停止 生成 def nbsp div 打印 直接 赋值 三次
原文地址:https://www.cnblogs.com/ElegantSmile/p/10755647.html