Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将set_超时与Supreme Text 3 API一起使用_Python_Settimeout_Sublimetext3_Sublime Text Plugin - Fatal编程技术网

Python 将set_超时与Supreme Text 3 API一起使用

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) 所以我希望我能一次打印一

我正试图使用(正如标题所说的) 设置超时 插件中升华文本3的功能
据我所知,在许多情况下需要使用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)