Python twisted task.LoopingCall在循环中定义回调时会弄乱回调
当循环中定义了一些LoopingCall任务时,twisted会处理回调并始终执行最后定义的一个 示例代码:Python twisted task.LoopingCall在循环中定义回调时会弄乱回调,python,twisted,Python,Twisted,当循环中定义了一些LoopingCall任务时,twisted会处理回调并始终执行最后定义的一个 示例代码: from twisted.internet import reactor, task from pprint import pprint for s in [1,2]: task.LoopingCall(lambda: pprint(s)).start(1) reactor.run() 答复:12 没有循环的代码: from twisted.internet import re
from twisted.internet import reactor, task
from pprint import pprint
for s in [1,2]:
task.LoopingCall(lambda: pprint(s)).start(1)
reactor.run()
答复:12
没有循环的代码:
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()
回答正确:
12
这是Python中作用域工作方式的结果
<>忘记扭曲一下,只考虑这个例子:
x = 1
f1 = lambda: x
x = 2
f2 = lambda: x
print f1()
print f2()
您可能期望结果是:
1
2
然而,它是:
2
2
f1
和f2
都可以“关闭”相同的变量:x
。变量一次只能引用一个对象,在x=2
之后,它引用2
-而不是1