首页 > 其他分享 >生成器

生成器

时间:2022-11-13 22:01:53浏览次数:26  
标签:调用 函数 生成器 yield next fib

---生成器

我们在函数中使用yield,这个函数就是生成器函数。

生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。而且记录了程序执行的上下文。

 

以下面的案例举例:当主函数f = fib(10)执行时,fib函数不会被立即调用,而是生成一个生成器对象,除非使用next(f)或者f.__next__()方法去调用生成器,

每调用一次,就会执行生成器函数,当执行到yied b时,函数fib会被暂停,将b值作为函数的返回值返回。知道遇到下一次next(f)或者f.__next__(),生成器函数接着yield b的抵挡继续往下执行。

 

以下斐波那契数列案例

def fib(n):
    a=0
    b=1
    count = 0
    while count < n:
        tmp = a
        a = b
        b = tmp + b
        yield b     #函数到此处会暂停,然后跳转到next(f),等next(f)结束后,在回到这里继续执行后面的语句。注意yield b其实就是相当于return b
        count += 1
f = fib(10)      
for i in f:      #对生成器对象循环遍历
    print(i)

 

 

 

 

生成器传值

我们可以通过 生成器对象.send()方法给生成器传值,其实就是给yield传值,不过在生成器函数里,需要有一个值来接收,以下案例时n=yield,来接收参数

def g_test():
    while True:
        n = yield
        print("receive from outside",n)
g = g_test()
g.__next__()    #调用生成器,同时发送none给yield

for i in range(10):
    g.send(i)   #调用生成器,同时发送i给yield

 

标签:调用,函数,生成器,yield,next,fib
From: https://www.cnblogs.com/powfu/p/16887114.html

相关文章

  • 生成器
    #生成器函数,函数里只要有yield关键字defgen_func():yield1yield2yield3#斐波拉契(当位数等于前两位数之和)0112358#惰性求值,掩饰求值......
  • 流水号生成器
    pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"......
  • 应用程序主题生成很简单!界面控件DevExtreme有现成的主题生成器
    DevExtreme拥有高性能的HTML5/JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NETCore,jQuery,Knockout等)构建交互式的Web应用程序,该套件附带功能......
  • fastposter v2.10.0 简单易用的海报生成器
    ......
  • 19个免费好用的CSS代码样式生成器工具
    整理编辑| 杨小爱CSS生成器可以帮助每个开发人员的生活变得轻松,提升工作效率,因为它可以立即实现大部分CSS效果,如阴影、边框、按钮颜色/形状等等。在本文中,我将分享19......
  • 5个可视化 CSS 网格布局生成器
    英文|https://blog.bitsrc.io/top-5-css-grid-layout-generators-f7743f0dfad2翻译|杨小二现代Web应用程序是响应式的。尽管很多CSS库和框架都支持Grid系统,但使用......
  • 逆向工程-代码生成器
    packagecom.atguigu.demo;importcom.baomidou.mybatisplus.annotation.DbType;importcom.baomidou.mybatisplus.annotation.IdType;importcom.baomidou.mybatisplus.ge......
  • 创建型模式——生成器模式
    生成器模式→建造者模式、builder一、意图生成器模式是一种创建型设计模式,使你能够分步骤创建复杂对象。该模式允许你使用相同的创建代码生成不同类型和形式的对象。......
  • SQL Father - 模拟数据生成器(后端)
    SQLFather-模拟数据生成器(后端)SQL之父项目:快速生成SQL和模拟数据,大幅提高开发测试效率!前后端全栈项目By[程序员鱼皮]制作不易,请勿商用和二次售卖!!!在线体验:http......
  • python-迭代器与生成器
    迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。迭代器有两个基本的方法:iter()和next()。字符串,列表或元组对象都可用于创建......