zoukankan      html  css  js  c++  java
  • 详解python中的yield

      yield

      1.yield与return的异同点

      相同:都可以返回函数执行的结果

      不同点:

      return是用来返回具体的某个值。

      yield一般与循环一起用,被称之生成器(generator),然后在这个生成器里面存放了每次循环以后的值,并且就在那放着,不输出也不返回,等你下次需要他的时候直接取出调用,相当于使得函数暂停。

      return返回之后停止,后面的就不在输出。

      yield返回之后接着运行后面的东西。

      总之,我们可以把yield就想成return,只是停止之后记住了这个返回的位置,下次还可以拿出来继续调用。

      2.yield使用的好处

      在处理非常大的数据集合时,最主要的好处就是省内存。

      3.具体实例理解生成器的用法

      实例一

      代码:

      #coding=utf-8

      def gen():

      #定义一个函数取值为1,2,3,4

      for i in range(1, 5):

      yield i

      print()

      #g为上面的生成器

      g = gen()

      #程序运行到yield就暂停,等待下一个next

      print(next(g))

      print(next(g))

      print(next(g))

      #send是往生成器里面传的值,最后打出也是这个值

      print(g.send(4))

      运行结果:

      

    在这里插入图片描述

     郑州做流产多少钱 http://www.kdwtrl.com/

      实例二

      代码:

      def list():

      stars = []

      while True:

      names = yield stars

      stars.append(names)

      print("你最喜欢的明星是", names)

      #g为上面的生成器

      g = list()

      #开启生成器

      next(g)

      print(g.send("甲"))

      print(g.send("乙"))

      print(g.send("丙"))

      实例三

      代码:

      def generator_two():

      while True:

      x = yield

      print("value:", x)

      #g为上面的生成器

      g = generator_two()

      #程序运行到yield就暂停,等待下一个next

      next(g)

      #给yield传送值1,yield再将1传给x,继续下一次循环,停在yeild处

      g.send(1)

      #给yeild传送值2,yield再将2传给x,继续下一次循环,停在yeild处

      g.send(2)

      #没有给yield传值,打印输出None,继续停在yield处,等待下一个next

      next(g)

      运行结果

      

    在这里插入图片描述
  • 相关阅读:
    大地坐标
    坐标转换
    哈希&查找树@堆
    设计模式--工厂模式(c++)
    STL容器的删除操作
    istringstream & ostringstream & stringstream
    第九次集体开发
    第八次开发
    我组举行第十四次立会暨第七次集体项目开发
    第十三次立会暨第六次集体开发
  • 原文地址:https://www.cnblogs.com/djw12333/p/12827187.html
Copyright © 2011-2022 走看看