zoukankan      html  css  js  c++  java
  • 2.生成器计算出斐波那契数列

    #斐波那契数列:1,1,2,3,5,8,13...
    def fib(times):
        a = 0
        b = 1
        n = 1
        while n <= times:
            # print(b)
            #返回加到F生成器中,每次都叠加
            yield b
            a,b = b,a+b
            n += 1
        return 'done'
    F = fib(10)
    
    # 获取生成器函数返回值,用捕获StopIteration异常
    while True:
        try:
            print(next(F))
        except StopIteration as e:
            print(e.value)
            break
    
    '''
    总结:
    生成器它能返回记住上一次返回时函数体中的位置,对生成器函数的第二次(或第n次),
    调用跳转至函数中间yield处,而上次调用的所有的局部变量都保持不变
    
    生成器不仅"记住"数据状态,还记住了它在流程控制构造中的位置
    
    生成器的特点:
    1.节约内存
    2.保存(上一次的)状态
    '''
    # print(next(F))
    # print(next(F))
    # print(next(F))
    # print(next(F))#在异常后面显示返回值
    
    # F = fib(7) #F是一个生成器
    # print(F)
    # for i in F:
    #     print(i)
    '''
    yield的作用就把一个函数变成一个生成器,带有yield函数不再是一个普通函数
    python解释器会将其视为一个生成器generator,调用fib(7)不会执行fib函数
    而是返回一个迭代器对象,在for循环执行时,每次循环都会执行fib函数内部的代码
    
    执行到yield b时,fib函数就返回一个值.下次再调用的时候,其实代码接着由中断代码
    接着执行
    '''
  • 相关阅读:
    csharp: mappings using Dapper-Extensions+Dapper.net.
    SQL Anywhere5.5: Metadata
    Csharp: read Sybase SQL anywhere5.5 using c#
    Sybase SQL anywhere5.5
    Spark基本概念
    Spark之RDD(含Java运行环境配置)
    Spark简介及安装
    Scala编程进阶
    Scala面向对象
    Scala基础
  • 原文地址:https://www.cnblogs.com/zhangboblogs/p/8634556.html
Copyright © 2011-2022 走看看