Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 14, 2013 21:45:14

kozlo22
От: Беларусь, Минск
Зарегистрирован: 2012-11-01
Сообщения: 115
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка в коде или в голове. Помогите разобраться.

Итак, наткнулся я в книге М. Лутца на такой вот пример:

#реализация утилиты timer собственноручно
#модуль mytimer
]import time, sys
trace = lambda *args: None # or print
timefunc = time.clock if sys.platform == 'win32' else time.time
def timer(func, *pargs, _reps=1000, **kargs):
	trace(func, pargs, kargs, _reps)
	start = timefunc()
	for i in range(_reps):
		ret = func(*pargs, **kargs)
	elapsed = timefunc() - start
	return (elapsed, ret)
def best(func, *pargs, _reps=50, **kargs):
	best = 2 ** 32
	for i in range(_reps):
		(time, ret) = timer(func, *pargs, _reps=1, **kargs)
		if time < best: best = time
	return (best, ret)
#модуль timeseqs
import sys, mytimer
reps = 10000
repslist = range(reps)
def forLoop():
    res = []
    for x in repslist:
        res.append(abs(x))
    return res
def listComp():
    return [abs(x) for x in repslist]
def mapCall():
    return list(map(abs, repslist))
def genExpr():
    return list(abs(x) for x in repslist) 
def genFunc():
    def gen():
        for x in repslist:
            yield abs(x)
    return list(gen())
print(sys.version)
for test in (mytimer.timer, mytimer.best):
    print('<%s>' % test.__name__)
    for tester in (forLoop, listComp, mapCall, genExpr, genFunc):
        elapsed, result = tester(test)
        print('-' * 35)
        print('%-9s: %.5f => [%s...%s]' % (test.__name__, elapsed, result[0], result[-1]))
    
Если запустить модуль timeseqs, то интерпретатор генерирует исключение:
TypeError: timer() missing 1 required positional argument: 'func'
Помогите решить проблему, т.к. я не в состоянии сам это сделать.

Отредактировано kozlo22 (Апрель 14, 2013 21:47:28)

Офлайн

#2 Апрель 15, 2013 00:40:26

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Ошибка в коде или в голове. Помогите разобраться.

kozlo22
elapsed, result = tester(test)
Мне думается что надо наоборот
elapsed, result = test(tester)



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Апрель 15, 2013 16:34:14

kozlo22
От: Беларусь, Минск
Зарегистрирован: 2012-11-01
Сообщения: 115
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка в коде или в голове. Помогите разобраться.

JOHN_16
как все просто… Спасибо, Вам.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version