2
參數使我在使用延遲函數時扭曲了很多。參數在使用扭曲時在循環中延遲函數
我認爲如果函數的參數是一個INT值VALUE,或者除了list和dict以外的其他基本類型,它應該傳遞值而不是引用。
from twisted.internet import defer, reactor
def deferFunc(x):
print "11111 %d" % x
d = defer.Deferred()
reactor.callLater(1, d.callback, x)
return d
@defer.inlineCallbacks
def inlineDeferFunc(x):
print "11111 %d" % x
d = defer.Deferred()
reactor.callLater(1, d.callback, x)
result = yield d
defer.returnValue(result)
def loop():
x = [1,2,3,4]
d = defer.succeed(0)
for i in x:
d.addCallback(lambda _ : inlineDeferFunc(i))
if __name__ == '__main__':
loop()
try:
reactor.run()
except:
reactor.stop()
結果是:
11111 1
11111 4
11111 4
11111 4
,結果搞糊塗了。
我怎樣才能像1,2,3,4
通過我發現 'd.addCallback(拉姆達_:inlineDeferFunc(X [0]))的方式\ \t .addCallback(拉姆達_:inlineDeferFunc(X [1]))\ \t。 addCallback(lambda _:inlineDeferFunc(x [2]))\ \t .addCallback(lambda _:inlineDeferFunc(x [3]))\' 這將工作正常。所以我認爲這與** for循環有關。 – holsety 2012-07-15 02:38:28