python – 在传递对象作为参数时,如何在使用“yield”时更新其变量?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 在传递对象作为参数时,如何在使用“yield”时更新其变量?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1119字,纯文字阅读大概需要2分钟。
内容图文
![python – 在传递对象作为参数时,如何在使用“yield”时更新其变量?](/upload/InfoBanner/zyjiaocheng/733/60b5ee6a8f674975ae8ce795502e4cc9.jpg)
仅在出于演示目的使用以下代码时:
from uuid import uuid4
class router(object):
def route(self):
res = response(jid=str(uuid4()))
worker = resource()
worker.dispatch(res)
print '[jid: %s, status: %s]' % (res.jid, res.status)
class response(object):
def __init__(self, jid):
self.jid = jid
self.status = 0
class resource(object):
def __init__(self):
self.status = 200
def dispatch(self, res):
res.status = self.status
rs = 'ok'
#return rs
yield rs
app = router()
app.route()
如果使用return rs而不是yield rs,我可以在资源类的dispatch(self,res)方法中更新status的值,out put类似于:
[jid: 575fb301-1aa9-40e7-a077-87887c8be284, status: 200]
但是如果使用yield rs我无法更新status的值,我总是得到原始值,例如:
[jid: 575fb301-1aa9-40e7-a077-87887c8be284, status: 0]
因此我想知道,当使用yield时,如何更新作为引用传递的对象的对象变量.
解决方法:
您需要迭代生成器.否则,不执行发生器.
>>> def gen():
... print(1)
... yield 'blah'
... print(2)
...
>>> g = gen() # No print (not executed)
>>> next(g) # print 1, yield `blah`. execution suspended.
1
'blah'
替换以下行:
worker.dispatch(res)
有:
for rs in worker.dispatch(res):
pass
要么
next(worker.dispatch(res))
内容总结
以上是互联网集市为您收集整理的python – 在传递对象作为参数时,如何在使用“yield”时更新其变量?全部内容,希望文章能够帮你解决python – 在传递对象作为参数时,如何在使用“yield”时更新其变量?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。