yield在python中返回None?
我在两个文件中有两个python类yield在python中返回None?,python,twisted,Python,Twisted,我在两个文件中有两个python类 文件:LdapConnection,类:LdapClass(),方法:getMachines(self) 上述打印语句打印机器列表中的所有实体 文件:Twisted,类:缓存,方法:loadSettings(自) 在上面的类中,我的打印打印None。我做错了什么?看起来您的loadSettings()例程生成的是getMachines()生成器,而不是生成器的结果。也许前者应该执行“yield from”?看起来您的loadSettings()例程
- 文件:LdapConnection,类:LdapClass(),方法:getMachines(self)
机器列表中的所有实体
- 文件:Twisted,类:缓存,方法:loadSettings(自)
在上面的类中,我的打印打印None
。我做错了什么?看起来您的loadSettings()
例程生成的是getMachines()
生成器,而不是生成器的结果。也许前者应该执行“yield from
”?看起来您的loadSettings()
例程生成的是getMachines()
生成器,而不是生成器的结果。也许前者应该在getMachines()
中执行“yield from
”?,不要yield self.machineList
在由defer.inlineCallbacks
修饰的方法中,yield所做的是在参数(一个defer.Deferred
对象)用一个值回调之前产生执行(如果它不是defer.Deferred
,它将继续)。(它类似于Python 3中新的wait
关键字。)您在loadSettings()
中正确地使用了它
在getMachines()
中,没有defer.Deferred
;您有一个列表
,因此它将继续。要将该值返回给调用方,请在方法末尾调用returnValue(self.machineList)
。在getMachines()
中,不要生成self.machineList
在由defer.inlineCallbacks
修饰的方法中,yield所做的是在参数(一个defer.Deferred
对象)用一个值回调之前产生执行(如果它不是defer.Deferred
,它将继续)。(它类似于Python 3中新的wait
关键字。)您在loadSettings()
中正确地使用了它
在getMachines()
中,没有defer.Deferred
;您有一个列表
,因此它将继续。要将该值返回给调用者,请在方法末尾调用returnValue(self.machineList)
。我曾尝试格式化您的代码,但它以前确实被破坏了。所以我不确定我是对的。请检查。可能重复的。你能把你的例子简化成一个简单的例子吗?很难获得您看到的确切输出。你对收益率的使用确实很奇怪。yield
和return
的组合看起来很可疑,从函数和yielding列表而不是单个项返回生成的值也是如此。虽然我知道您使用的py2没有
的收益率,但我希望循环收益率或的收益率。此问题的答案包含在您询问的关于此代码的其他类似问题中。我试图格式化你的代码,但它以前真的坏了。所以我不确定我是对的。请检查。可能重复的。你能把你的例子简化成一个简单的例子吗?很难获得您看到的确切输出。你对收益率的使用确实很奇怪。yield
和return
的组合看起来很可疑,从函数和yielding列表而不是单个项返回生成的值也是如此。虽然我知道您使用的py2没有的收益率,但我希望循环收益率或的收益率。此问题的答案包含在您询问的关于此代码的其他类似问题中。鉴于帕伦斯的自由打印,她正在使用python 2<代码>从产生的收益在3.3中引入。升级时间到了!我同意。Py2现在(终于)死在水里了。鉴于帕伦斯的自由打印,她使用的是python 2<代码>从产生的收益在3.3中引入。升级时间到了!我同意。Py 2现在死在水里了(终于)
@defer.inlineCallbacks
def getMachines(self):
c = ldapconnector.LDAPClientCreator(reactor, ldapclient.LDAPClient)
overrides = {self.basedn: (self.serverip, 389)}
client = yield c.connect(self.basedn, overrides=overrides)
yield client.bind(self.binddn, self.bindpw)
o = ldapsyntax.LDAPEntry(client, self.basedn)
results = yield o.search(filterText=self.query)
for entry in results:
for i in entry.get('name'):
self.machineList.append(i)
yield self.machineList
print self.machineList
return
@defer.inlineCallbacks
def loadSettings(self):
returned = yield LdapClass().getMachines()
print returned