美文网首页
python——yield

python——yield

作者: mutang | 来源:发表于2020-10-20 18:52 被阅读0次
  • 使用了yield关键字的函数不再是函数,而是生成器。(使用了yield的函数就是生成器)
  • yield关键字有两点作用:
    • 保存当前运行状态(断点),然后暂停执行,即将生成器(函数)挂起
    • 将yield关键字后面表达式的值作为返回值返回,此时可以理解为起到了return的作用
  • 可以使用next()函数让生成器从断点处继续执行,即唤醒生成器(函数)
  • Python3中的生成器可以使用return返回最终运行的返回值,而Python2中的生成器不允许使用return返回一个返回值(即可以使用return从生成器中退出,但return后不能有任何表达式)。
1. 第一次唤醒时,使用send必须传值为   None,如果传其他的,会报错
TypeError: can't send non-None value to a just-started generator
2. 当在一个函数内既有yield又有return(在末端)时,return不影响yield使用,那怎样取return的结果呢? 
    使用生成器的next或send方法唤醒,当抛出stopiteration异常后,取异常的值就是返回值
    while True:
    try:
        ret = next(g)
        print(ret)
    except Exception as e:
        print(e)
        print(e.value)#这两种方式都可以取到return的值
        break
    

利用yield实现协程(函数交替执行)

其原理,利用yield的中断函数的功能

import time


def task_1():
   while True:
      print("----1-----")
      time.sleep(0.1)
      yield


def task_2():
   while True:
      print("----2-----")
      time.sleep(0.1)
      yield


def main():
   t1 = task_1()
   t2 = task_2()
   while True:
      next(t1)
      next(t2)


if __name__ == '__main__':
   main()

相关文章

  • python yield和yield from用法总结

    python yield和yield from用法总结 yield 作用: 注: generator的next()...

  • python: yield

    python: yield

  • Python yield关键字

    Python中yield关键字解释 这篇文章关于python的yield关键字。并且文章中会解释什么是yield,...

  • Python yield

    参考:Python yield 使用浅析 - IBM 递归中使用yield 有时候yield就可以解决递归的问题,...

  • python-复盘-yield & return区别

    python-复盘-yield & return区别

  • python 生成器和协程

    yield 对于python生成器中的yield来说,yield item会产出一个值,提供给next()的调用方...

  • Python yield

    Python yield的用法详解 如何快速的对yield有一个初步的了解,那么首先我们可以先将yield看做是r...

  • yield(对比return)

    带有 yield 的函数在 Python 中被称之为 generator(生成器),return和yield的形式...

  • 重构Python代码tips

    将内部循环中的yield替换为yield from经常忽略的一个小窍门是 Python 的yield关键字有对应的...

  • Thread yield 方法

    yield 在其他语言例如 Python 或者 C# 也有协程的概念,在 Java 中 Thread.yield ...

网友评论

      本文标题:python——yield

      本文链接:https://www.haomeiwen.com/subject/mczdmktx.html