import timeit
def time_algo(sort_fun, input_seq, num=100):
'''
Time how long it takes to sort sequence 'input_seq' using
function 'sort_fun'. Take min of 'num' times.
'''
foo = list(input_seq)
wrapped = wrapper(sort_fun, foo)
return min(timeit.repeat(wrapped, repeat=num, number=1))
def wrapper(func, *args):
def wrapped():
return func(*args)
return wrapped
print time_algo(list.sort, [10,9,8,7,6,5,4,3,2,1], num = 100)
sorun sort_fun
ilk idamından sonra, giriş listesi önceden sıralandığını olduğunu ve var num - 1
kez geri kalanı için sıralanmış bir listede çalışıyor.
İşlev zamanlamasının her tekrar edilmesinden önce giriş işlevi argümanlarını (bu durumda foo = list(input_seq)
'u yürütün) nasıl başlatabilirim? Veya timeit
modülünü kullanarak bunu yapmanın doğru yolu ne olurdu (doğru sonuçlara ihtiyacım var, bu yüzden time.clock()
vb. Gibi diğer zamanlama yöntemlerini kullanmak istemiyorum)?
"Zamanlama" sonucuna dahil edilen bir kopyanın zamanlamasına sahip olmanın sakıncası var mı? – MSeifert
İşte tam olarak burada kaçınmaya çalışıyorum :) –
Bu zor olacak. İşlevinizin, argümanlarını değiştirmemesi için test edilmesini istersiniz. Veya her arama için bir kopyasını yapmanız gerekir. Ancak, fonksiyonun çalışması için önemli bir süre geçmedikçe, siz (veya timeit uygulaması), her aramanın etrafında zamanlamayı başlatamaz ve durduramaz, çok kısadır, bu 'num> 1' noktasıdır. – Pierce