2015-02-12 44 views
-1

我想用timeit來獲取帶有兩個參數的 中的函數之一的運行時間,但是我總是收到錯誤:無法導入命名make_heap() 類queueHeap(): DEF make_heap(個體,ALIST): I = LEN(ALIST)// 2 self.currentSize = LEN(ALIST) self.heapList = [0] + ALIST [: ] 而(I> 0): self.swapDown(ⅰ) I = I - 1使用timeit.Timer()來定時在一個類中有兩個參數的函數

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

類是queueHeap(): – Joe 2015-02-12 07:42:29

+0

請修復代碼中的問題的格式。就目前而言,完全不可能理解它的作用,因爲所有的縮進都被搞砸了,而其中的一部分並不在代碼塊中。 – Bakuriu 2015-02-12 08:17:14

回答

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'>} 

注:

  1. self不在字典返回
  2. method不是非此即彼
  3. 只有模塊級的變量都在那裏

所以你不能訪問selfmethod這樣。事實上,整個事情似乎是非常糟糕的設計。爲什麼你想在其中一個方法中剖析一個類?只需使用一個實例:

my_instance = MyClass() 
result = timeit.Timer('my_instance.the_method()', 'from __main__ import my_instance').timeit(1) 
相關問題