详解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)

  运行结果

  

在这里插入图片描述
原文地址:https://www.cnblogs.com/djw12333/p/12827187.html