Qwerty16
Реализовал функцию сортировки и нужно вычислить время ее выполнения
Модуль timeit не вычисляет время, он даёт возможность сравнить время и найти более быстрый и более медленный вариант.
Можно запускать его прямо из командной строки.
[guest@localhost ~]$ python3 -m timeit -s "def f(n): return n ** 3" "f(10)"
1000000 loops, best of 3: 0.568 usec per loop
[guest@localhost ~]$
Можно и симпортировать что-нибудь из какого-нибудь скрипта и запустить timeit снаружи
[guest@localhost py]$ cat t.py
#!/usr/bin/env python3
def cs1(a):
h = 0
u = 0
c = 0
g = 0
j = 0
d = 0
for k in range(len(a)-1, 0, -1):
f = False
h += 1
for i in range(k, 0, -1):
j += 1
if a[i] < a[i-1]:
a[i], a[i-1] = a[i-1], a[i]
c += 1
f = True
d += 1
for i in range(k):
u += 1
if a[i] > a[i+1]:
a[i], a[i+1] = a[i+1], a[i]
g += 1
f = True
if not f:
return a,h,u,c,g,j,d
[guest@localhost py]$
[guest@localhost py]$ python3 -m timeit -s "from t import cs1 as f" "f([1, 2, 3])"
100000 loops, best of 3: 4.5 usec per loop
[guest@localhost py]$
Но можно и специальный скрипт для разных замеров сделать
#!/usr/bin/env python3
import timeit
def f1():
pass
def f2():
pass
def main():
t1 = timeit.Timer('f1()', 'from __main__ import f1')
t2 = timeit.Timer('f2()', 'from __main__ import f2')
for t in t1, t2:
print(t.repeat(3, 10000))
if __name__ == '__main__':
main()
Здесь нужно просто импортировать нужную функцию из нужного модуля и вставить её вызов в f1() и в f2() с разными параметрами, а потом вызвать скрипт, как любой другой.
t.py
#!/usr/bin/env python3
def cs1(a):
h = 0
u = 0
c = 0
g = 0
j = 0
d = 0
for k in range(len(a)-1, 0, -1):
f = False
h += 1
for i in range(k, 0, -1):
j += 1
if a[i] < a[i-1]:
a[i], a[i-1] = a[i-1], a[i]
c += 1
f = True
d += 1
for i in range(k):
u += 1
if a[i] > a[i+1]:
a[i], a[i+1] = a[i+1], a[i]
g += 1
f = True
if not f:
return a,h,u,c,g,j,d
timecmp.py
#!/usr/bin/env python3
import timeit
import t
def f1():
t.cs1([1, 2, 3] * 3)
def f2():
t.cs1([1, 2, 3] * 5)
def main():
t1 = timeit.Timer('f1()', 'from __main__ import f1')
t2 = timeit.Timer('f2()', 'from __main__ import f2')
for t in t1, t2:
print(t.repeat(3, 10000))
if __name__ == '__main__':
main()
[guest@localhost py]$ ./timecmp.py
[0.23246537600016381, 0.22988142500025788, 0.2342479890003233]
[0.49446545399996467, 0.48956154899997273, 0.4928233850000652]
[guest@localhost py]$