Python 将set_超时与Supreme Text 3 API一起使用
我正试图使用(正如标题所说的) 设置超时 插件中升华文本3的功能Python 将set_超时与Supreme Text 3 API一起使用,python,settimeout,sublimetext3,sublime-text-plugin,Python,Settimeout,Sublimetext3,Sublime Text Plugin,我正试图使用(正如标题所说的) 设置超时 插件中升华文本3的功能 据我所知,在许多情况下需要使用lambda函数。所以我尝试了这个简单的测试: class SetTimeoutTestCommand(sublime_plugin.WindowCommand): def run(self): for x in range(1,10): sublime.set_timeout(lambda : print(x), 4000) 所以我希望我能一次打印一
据我所知,在许多情况下需要使用lambda函数。所以我尝试了这个简单的测试:
class SetTimeoutTestCommand(sublime_plugin.WindowCommand):
def run(self):
for x in range(1,10):
sublime.set_timeout(lambda : print(x), 4000)
所以我希望我能一次打印一个数字,每个数字之间有4秒的延迟。如Sublime 3 API中所述:
在给定延迟(毫秒)后在主线程中运行回调。延迟相等的回调将按添加顺序运行
但是我有9'9'是在4秒后打印的。因此,根据循环的第一次迭代,所有“9”都同时打印。你知道我能做些什么来解决这个问题吗 提前谢谢 编辑:我发现这是可行的(好吧,它打印'9'9次,每次之间有1秒的延迟:
class SetTimeoutTestCommand(sublime_plugin.WindowCommand):
def run(self):
for x in range(1,10):
sublime.set_timeout(lambda : print(x), x*1000)
但问题仍然存在:它只打印出“9”…首先要了解的是set\u timeout调用会立即返回。也就是说,您正在安排所有打印函数在1秒内运行,而不是在1秒之间运行。根据您的编辑,您似乎已经明白了这一点,但我想我会澄清一下 至于总是打印9,所有的打印语句都引用相同的值。因此,即使在计划第一次打印时,它也会引用与您正在增加的相同的x值。当打印实际运行时(1秒后),x值为9。因此,每次计划回调都会打印9
希望这能澄清一些问题。首先要了解的是set\u timeout调用会立即返回。也就是说,您正在计划在1秒内运行所有打印函数,而不是在1秒之间运行。根据您的编辑,您似乎已经明白了这一点,但我想我会澄清一下 至于总是打印9,所有的打印语句都引用相同的值。因此,即使在计划第一次打印时,它也会引用与您正在增加的相同的x值。当打印实际运行时(1秒后),x值为9。因此,每次计划回调都会打印9
希望这能澄清一些问题。要打印不同的数字,请在此基础上更改插件脚本
class SetTimeoutTestCommand(sublime_plugin.WindowCommand):
def run(self, edit):
for x in range(1,10):
sublime.set_timeout(lambda x=x: print(x), x*1000)
因为所有lambda函数都引用相同的
x
,当执行该函数时,x
值达到9
以打印不同的数字,请在此基础上更改插件脚本
class SetTimeoutTestCommand(sublime_plugin.WindowCommand):
def run(self, edit):
for x in range(1,10):
sublime.set_timeout(lambda x=x: print(x), x*1000)
因为所有lambda函数都引用相同的
x
,当执行时x
值达到9
好的,据我所知,lambda函数将采用x的最后一个值,因为没有赋值。通过进行赋值,每次迭代都会替换该值。您有学习mor的参考资料吗关于这个问题,我想不出什么好主意,尽管我确信他们就在那里。理解什么时候是通过引用传递还是通过值传递是很有帮助的(通常)。好的,据我所知,lambda函数将采用x的最后一个值,因为没有赋值。通过进行赋值,在每次迭代中替换该值。你有没有参考资料来学习更多关于这个主题的知识?谢谢=)我脑子里想不出任何东西,尽管我确信它们就在那里。理解什么时候是通过引用传递还是通过值传递是很有帮助的(一般来说)。是的,这很有效,谢谢。在作业中,我们可以替换为:lambda y=x:print(y)
Yes它可以工作,谢谢。在作业中,我们可以替换为:lambda y=x:print(y)