在元组中保存函数而不执行

4 投票
3 回答
2296 浏览
提问于 2025-04-17 03:03

我有一个像下面这样的元组:

self.tagnames = (('string', self.do_anything()),)

它应该在一个字符串和另一个字符串匹配时执行一个特定的函数。不过,当我初始化 self.tagnames 的时候,似乎这个函数已经被执行了。

我该如何解决这个问题,让它在启动时不执行这个函数呢?

3 个回答

1

你只需要去掉括号:

self.tagnames = (('string', self.do_anything),)

很明显,self.do_anything() 是立即调用这个方法,而 self.do_anything 则返回一个在Python中称为“绑定方法”的东西,也就是说,它是一个可以调用的对象,你只需要传入参数(如果有的话),就能在特定的实例上调用这个方法。

2
self.tagnames = (('string', self.do_anything),)

你可以通过在函数名后面加上括号和参数来调用一个函数:

len 是一个函数,len(s) 是在对参数 s 调用这个函数。如果你只是写函数的名字,那你只是得到了这个函数本身。去掉括号和参数,你就不再调用这个函数了。

4
self.tagnames = (('string', self.do_anything),)

() 是一个函数调用。如果你想把这个调用推迟到以后再执行,可以只写函数的名字,不加括号,像这样。

撰写回答