Python yield send 获得生成器后,需要先启动一次

举报
千江有水千江月 发表于 2021/12/20 16:26:40 2021/12/20
【摘要】 环境信息ModelArtsNotebookmindspore1.2.0-openmpi2.1.1-ubuntu18.04  代码示例def yield_test(): # next() 遇到yield会停止,保存数据并返回后面的数值 # send_value默认为None a = 1 send_value = yield a + 1 print(send_va...

环境信息

  • ModelArts
    • Notebook
      • mindspore1.2.0-openmpi2.1.1-ubuntu18.04

代码示例

def yield_test():
    # next() 遇到yield会停止,保存数据并返回后面的数值
    # send_value默认为None
    a = 1
    send_value = yield a + 1
    print(send_value)

    send_value = yield a + 1
    print(send_value)
# 获得生成器
generator = yield_test()
# 启动 - 第一种方式
print(id(generator), generator.__next__())
# 想理解好 send 的功能,建议使用 pycharm - Debug - Step Into(F7)。一步一步地跟下来
print(generator.send("hello"))


140522373701328 2
hello
2
# 获得生成器
generator = yield_test()
# 启动 - 第二种方式
print(id(generator), generator.send(None))
print(generator.send("world"))


140522373701456 2
world
2

知识扩展

错误代码示例

def yield_test():
    a = 1
    send_value = yield a + 1
    print(send_value)
# 获得生成器
generator = yield_test()
# 直接用send("hello world")
generator.send("hello world")


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-8-4c9cc4be2e9e> in <module>
      2 generator = yield_test()
      3 # 直接用send("hello world")
----> 4 generator.send("hello world")

TypeError: can't send non-None value to a just-started generator

参考博文

备注

  1. 欢迎各位同学一起来交流学习心得^_^
  2. 在线课程、沙箱实验、认证、大赛、论坛和直播,其中包含了许多优质的内容,推荐了解与学习。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。