zoukankan      html  css  js  c++  java
  • python基础---生成器

    可迭代对象里面,都可以使用一个__iter__(),函数返回一个迭代器

    迭代器本身只是一个内存地址 ,使用next(),__next__(),send().可以从这里拿值

    在 Python 中,使用了 yield 的函数被称为生成器(generator)。

    跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

    在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

    调用一个生成器函数,返回的是一个迭代器对象。

    挂起,这是生成器函数最要记住的特点

    import time
    def prod():
    for baozi in range(100):
    print('开始生产包子',' ')
    time.sleep(0.3)
    yield '天下第一包子当天生产的第%s个包子'%baozi
    time.sleep(0.3)
    print('开始卖包子',' ')
    Baozi=prod()
    for coms in range(100):
    time.sleep(1)
    print('第%s位顾客上门了'%coms)
    print('第%s位顾客吃了' %coms,Baozi.__next__(),' ')


    以下实例使用 yield 实现斐波那契数列
     import sys
    
    def fibonacci(n): # 生成器函数 - 斐波那契
        a, b, counter = 0, 1, 0
        while True:
            if (counter > n): return
            yield a
            a, b = b, a + b
            counter += 1
    f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
    
    while True:
        try:
            print (next(f), end=" ")
        except StopIteration:
            sys.exit()
    

      输出:0 1 1 2 3 5 8 13 21 34 55

  • 相关阅读:
    无符合条件的记录,SUM函数返回NULL。返回0而不是Null
    Java中的堆栈,队列,链表
    Java集合类的问题
    2014.7.30日结
    我的CSS之路1
    2014.7.27-7.28日结
    LeetCode解题源代码链接集锦一
    2014.7.23日结
    C++之数组声明与初始化
    系统结构之指令
  • 原文地址:https://www.cnblogs.com/yuanji2018/p/8964201.html
Copyright © 2011-2022 走看看