2016-03-04 2 views
-1

сказать, что я хочу, чтобы проверить две реализации кучи, как это:использование timeit внутри функции

def test_heap(): 
    for i in range(15): 
     test_list = random.sample(range(10000), 1000) 
     print(timeit("h = heap1(test_list)", "setup")) 
     print(timeit("h = heap2(test_list)", "setup")) 

if __name__ == "__main__": 
    test_heap() 

Я не хочу, чтобы положить все, что в test_heap в основном, что следует утверждение настройки так Я могу импортировать test_list в timeit?

ответ

1

Некоторые из названий, которые вам нужны, являются, по-видимому, глобальными. (По крайней мере, я предполагаю, что это потому, что они не показаны.) Вы можете просто импортировать их из __main__.

"from __main__ import heap1, heap2" 

test_list является более жестким. Вы можете получить его с помощью функции locals(), но это невозможно в пределах timeit(). Вероятно, проще всего в этом случае, так как это всего лишь список целых чисел, это построить строковую версию списка и оценить ее Python.

"test_list = %r" % test_list 

(Это не будет работать так хорошо, если бы вы, например, экземпляры объектов.)

Поместите их вместе с точкой с запятой, и вы получите следующую строку настройки:

"from __main__ import heap1, heap2; test_list = %r" % test_list 

(также , не забудьте закрыть круглые скобки)

+1

Проблема заключается в том, что 'test_list' является локальным, и вопросник явно не хочет делать его глобальным. Вы не можете импортировать его. – user2357112

+0

, поэтому я могу импортировать только глобальные переменные? – Liumx31

+0

Только глобальные переменные находятся в '__main__'. Однако вы можете получить локальные переменные. Я отредактирую. – kindall

Смежные вопросы