gpt4 book ai didi

python - 如何将当前对象引用(自身)传递给 timeit 模块的 Timer 类?

转载 作者:太空宇宙 更新时间:2023-11-04 07:47:26 26 4
gpt4 key购买 nike

我正在尝试将当前对象引用(即 self)传递给 timeit 模块的 Timer 类,但不知何故我不知道如何去做。我试图在 timeit 文档中找到它,但找不到。我已将我的代码附在这个问题上。

from timeit import Timer
import time
import math

class PollingDemo(Thread):

def __init__(self):
pass

def looper(self):

while 1:
try:
T = Timer("self.my_func()")
#T = Timer("polling.my_func()", "from __main__ import polling")
time_elapsed = T.timeit(1)

if math.ceil(time_elapsed) == 1:
print "Process is sleeped for 1 sec"
time.sleep(1)

except KeyboardInterrupt:
return

def my_func(self):
pass

if __name__ == '__main__':

polling = PollingDemo()
polling.looper()

在这个例子中,我试图通过 Timer 类的 timeit() 方法调用 PollingDemo 类的 my_func() 方法,但我收到“NameError: global name 'self' is not defined”错误。如果我们尝试通过 ma​​in 访问该对象,它就可以工作(下一条注释行工作得很好)。有人可以请问为什么这种行为如此。
提前致谢。

最佳答案

不要使用字符串,Timer 也接受可调用对象,所以直接传递一个绑定(bind)到 self 的引用,即

T = Timer(self.my_func)

(只是引用,不要调用它)。

如果您需要更复杂的设置,再次将其包装在函数或方法中并传递该方法。

关于python - 如何将当前对象引用(自身)传递给 timeit 模块的 Timer 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3698230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com