在元组中保存函数而不执行
我有一个像下面这样的元组:
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),)
()
是一个函数调用。如果你想把这个调用推迟到以后再执行,可以只写函数的名字,不加括号,像这样。