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

Ris*_*ise 1 python

我试图将当前对象引用,即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()  
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我试图通过Timer类timeit()方法调用PollingDemo类的my_func()方法,但我得到"NameError:全局名称'self'未定义"错误.如果我们试图通过main访问该对象它是有效的(下一个注释行完美地工作).有人可以为什么会这样做.
提前致谢.

Ivo*_*ijk 5

不要使用字符串,Timer也接受callables,所以直接传递绑定到self的引用,即

T = Timer(self.my_func)
Run Code Online (Sandbox Code Playgroud)

(只是参考,不要称之为).

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

  • 字符串在其自己的隔离上下文中进行评估(您不能提供本地或全局变量)."自我"将无法使用.这意味着字符串(可选地带有它们的设置字符串)必须是自包含的,并定义/引入必要的所有内容. (2认同)