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

标签 python timer lambda

我之前有一个错误。 (“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/

相关文章:

c# - Lambda 表达式无法编译

python - 伪增加值表的 'resolution'

python - 如何使用 boto3 删除 aws elasticache redis 类型的集群?

python - Rdd lambda 函数围绕行与列的混淆

java - 处理 P5 - millis() 的计时器问题

java - 如何使用定时器动态调整帧大小?

lambda - java.util.function.Function 中的状态

python - 在 Pandas 中获取最大值的行

python - 管理 Jython 包的最佳方法

c# - 在没有 NtSetTimerResolution 的情况下增加 Windows 上的计时器分辨率(高分辨率)