我之前有一个错误。 (“NoneType 对象不可调用”) 我找到了解决问题的方法,不是直接调用“update”函数而是通过 lambda 函数调用它。
该代码每秒打印开始时间,持续 10 秒,然后更新打印的时间。
(这是我的一个更大项目的概念验证代码。我使用此构造来创建一个新的时间戳,在该时间戳上打开一个日志文件。而不是在第二天打开旧的日志文件,创建并使用每天 00:00:00 发布一个新的)
now = str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
delta_t_seconds = 10
def update():
global now
now = str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
print "Time updated"
return
t = timer(delta_t_seconds, lambda: update())
t.start()
while (True):
print("Time is:" + now)
time.sleep(1)
我的问题是: 为什么我必须通过 lambda 函数调用它?:
t = timer(delta_t_seconds, lambda: update())
而不是直接:
t = timer(delta_t_seconds, update())
调用 function2 的唯一目的是调用 function1 似乎很愚蠢。与直接调用 function1 相比。
最佳答案
不需要使用lambda,可以直接传递函数:
t = timer(delta_t_seconds, update)
通过执行timer(delta_t_seconds, update())
(注意额外的括号),您调用update
一次,它返回None
。然后 timer
尝试调用 None
,这是不可能的(None
不可调用),并给出您遇到的错误。
关于Python:为什么需要通过 lambda 函数调用计时器函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31582727/