当在循环中定义了一些LoopingCall任务时,扭曲会扰乱回调,并始终执行最后一个定义的任务
示例代码:
from twisted.internet import reactor, task
from pprint import pprint
for s in [1,2]:
task.LoopingCall(lambda: pprint(s)).start(1)
reactor.run()返回:1 2 2 2 2 2
没有循环的代码:
from twisted.internet import reactor, task
from pprint import pprint
task.LoopingCall(lambda: pprint(1)).start(1)
task.LoopingCall(lambda: pprint(2)).start(1)
reactor.run()正确答案:1 2 1 2 1 2
发布于 2013-04-30 01:51:04
这是由Python中作用域的工作方式决定的。
暂时忘掉Twisted,只考虑这个例子:
x = 1
f1 = lambda: x
x = 2
f2 = lambda: x
print f1()
print f2()您可能会期望结果是:
1
2然而,相反,它是:
2
2f1和f2函数都“关闭”了同一个变量:x。该变量一次只能引用一个对象,在x = 2之后,它引用2,而不是1。
https://stackoverflow.com/questions/16284313
复制相似问题