我正在尝试使用timeit来获取其中一个函数的运行时间 有两个参数,但我不断收到错误:无法导入名称make_heap() class queueHeap(): def make_heap(self,alist): i = len(alist)// 2 self.currentSize = len(alist) self.heapList = [0] + alist [:] 而(i> 0): self.swapDown(ⅰ) i = i - 1
for num in range(1, 100, 10) :
L = []
binaryHeap = queueHeap()
for i in range(1, num):
randomElement = random.randint(1, 100)
L.append(randomElement)
time_MakeHeap = timeit.Timer('make_heap(self, L)', 'from __main__ import make_heap, self, L')
print("n=%s: %s" % (num, time_MakeHeap.timeit(1)))
答案 0 :(得分:0)
问题是__main__
是指当前的模块,而不是当前的范围。
例如,如果您的testing.py
文件包含:
class Test:
def method(self):
import __main__
print(vars(__main__))
Test().method()
运行它的输出是:
$python3 testing.py
{'__file__': 'testing.py', '__cached__': None, '__builtins__': <module 'builtins' (built-in)>, '__loader__': <_frozen_importlib.SourceFileLoader object at 0x7f5e8a027518>, '__doc__': None, '__spec__': None, '__name__': '__main__', '__package__': None, 'Test': <class '__main__.Test'>}
注意:
self
不在字典中method
不是因此无法访问self
和method
。事实上,整个事情看起来真的很糟糕。为什么要在其中一个方法中分析一个类?只需使用一个实例:
my_instance = MyClass()
result = timeit.Timer('my_instance.the_method()', 'from __main__ import my_instance').timeit(1)