Python每日一问11
Posted Elegant Smile
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python每日一问11相关的知识,希望对你有一定的参考价值。
问:
请简单说明一下以下代码的执行过程以及最终的输出结果
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的主要内容,如果未能解决你的问题,请参考以下文章
Java -- 每日一问:有人说“Lambda能让Java程序慢30倍”,你怎么看?