zoukankan      html  css  js  c++  java
  • 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基础:映射和集合类型
    python基础:列表生成式和生成器
    python基础:名称空间与作用域
    http://www.cnblogs.com/fczjuever/archive/2013/04/05/3000680.html
    2016新年总结
    send()和recv()函数详解
    python基础:测量python代码的运行时间
    python函数与方法装饰器
    Python基础:11.2_函数调用
    MySQL学习笔记-数据库后台线程
  • 原文地址:https://www.cnblogs.com/ElegantSmile/p/10755647.html
Copyright © 2011-2022 走看看