首页 / PYTHON / python中的yield
python中的yield
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python中的yield,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1896字,纯文字阅读大概需要3分钟。
内容图文
![python中的yield](/upload/InfoBanner/zyjiaocheng/831/6132d2b0d7744760b4598caaf5e76125.jpg)
一直不太清楚yield的用法 看了很多资料 他们讲的都很复杂 还是自己调试一下才好
首先带yield的函数其实不是真正意义上的函数 而是一个生成器 可以把yield理解为音乐播放器上面的暂停
和播放 执行到yield的时候程序暂停 返回后面的值 当再次调用的时候 程序从暂停的地方 开始运行
def bi():
print("starting")
while True:
print("1.")
res=yield 222
print("2.res:",res)
print("3")
g=bi()
print("4")
print(next(g))
print("*"*10)
print("5")
print(next(g))
打印结果:
3
4
starting
1.
222
**********
5
2.res: None
1.
222
先把yield看做”return” 在程序中返回一个值,返回后程序就不往下运行了
程序开始时
先打印一个3 然后运行bi() 但是bi()函数里面有关键字yield 所以函数并不会真正的执行
先得到生成器g
可以把g当成对象来看 接着打印一个4
直到调用了next方法 函数bi()开始运行 打印starting
进入到while中 打印1. 遇到了yield 把它看成return 但res并没有真正的赋值 返回了222
函数bi()停止 打印分割线 接着打印5 再次调用next 程序从停止的地方继续 所以打出函数里面的第3条语句 但是res并没有值 所以为空 接着执行while循环 打印1. 遇到yield 打印”return 222”
那么下面的print(“2.res:”,res)中的res永远没有值
所以yield和return的关系和区别,带yield的函数是一个生成器 而不是一个函数,但是这个生成器有一个next方法,作用是接着上一次停止的地方执行 遇到yield后 返回生成的数 结束
然后可以用send方法 发送一个值给res
def bi():
print("starting")
while True:
print("1.")
res=yield 222
print("2.res:",res)
print("3")
g=bi()
print("4")
print(next(g))
print("*"*10)
print("5")
print(next(g))
print("*"*10)
print("*"*10)
print(g.send(100))
打印结果:
3
4
starting
1.
222
**********
5
2.res: None
1.
222
**********
**********
2.res: 100
1.
222
代码只是在后面加了3行
程序执行g.send(100) 程序会从关键字yield继续运行 send中包含next()方法 继续执行进入while循环 再次遇到yield 返回后面的值 程序暂停 直到再次调用next或者是send
利用yield是为了减少内存空间的使用 如果用range(100)的话 就生成了有100个数的list在内存里面
for n in range(100):
j=n
可能这个数更大 占用的内存空间就更大
内容总结
以上是互联网集市为您收集整理的python中的yield全部内容,希望文章能够帮你解决python中的yield所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。