Python:为什么需要通过lambda函数调用计时器函数?

Python:为什么需要通过lambda函数调用计时器函数?,python,timer,lambda,Python,Timer,Lambda,我以前犯过一个错误。(“非类型对象不可调用”) 我找到了解决问题的方法,不再直接调用“update”函数,而是通过lambda函数调用它 代码每秒打印一次开始时间,持续10秒,然后更新打印时间一次 (这是我的一个更大项目的概念验证代码。我使用此结构创建一个新的时间戳,在该时间戳上打开一个日志文件。以代替第二天打开旧的日志文件,每天00:00:00创建并使用一个新的日志文件) 我的问题是: 为什么我必须通过lambda函数调用它 t = timer(delta_t_seconds, lambda:

我以前犯过一个错误。(“非类型对象不可调用”) 我找到了解决问题的方法,不再直接调用“update”函数,而是通过lambda函数调用它

代码每秒打印一次开始时间,持续10秒,然后更新打印时间一次

(这是我的一个更大项目的概念验证代码。我使用此结构创建一个新的时间戳,在该时间戳上打开一个日志文件。以代替第二天打开旧的日志文件,每天00:00:00创建并使用一个新的日志文件)

我的问题是: 为什么我必须通过lambda函数调用它

t = timer(delta_t_seconds, lambda: update())
而不是直接:

t = timer(delta_t_seconds, update())
t = timer(delta_t_seconds, update)

调用函数2似乎很愚蠢,而函数2的唯一目的就是调用函数1。与直接调用function1相比。

您不需要使用lambda,您可以直接传递函数:

t = timer(delta_t_seconds, update())
t = timer(delta_t_seconds, update)

通过执行
timer(delta\u t\u seconds,update())
(注意额外的括号),可以调用
update
一次,它返回
None
<代码>计时器然后尝试调用
,这是不可能的(
不可调用),给出您遇到的错误。

您没有

update()
不是函数,而是对函数的调用。因此,它在调用时执行更新。您需要传入一个函数,它将是
t=timer(delta\u t\u seconds,update)
。注意
update

之后缺少括号,使用
t=timer(delta\u t\u seconds,update())
,您将返回值(首先调用函数获取它)而不是函数本身传递给
timer


如果您想将
update
传递给
timer
,只需使用
t=timer(delta\u seconds,update)
,您不需要使用
lambda

显然
timer
期望第二个参数是可调用的(fx a函数),而您的函数
update
不返回可调用的(事实上,它根本不返回任何内容-即
None
)。lambda是从表达式创建可调用的方法之一(在调用lambda时计算表达式)。请注意,lambda
lambda:update()
相当于
update
(即函数对象).

我想在定义计时器时不应该调用它,而是在它启动时调用。您没有给出定义或导入
计时器的代码,因此很难确定。