Показаны сообщения с ярлыком Хронометраж. Показать все сообщения
Показаны сообщения с ярлыком Хронометраж. Показать все сообщения

15 мая 2013 г.

Хронометраж, используя аргументы, которые передаются по именам


Простите за долгий перерыв, тут будет показана другая версия реализации хронометража, с помощью аргументов которые передаются только по именам.

Для упрощения реализации модуля mytimer, мы можем также использовать аргументы, которые могут передаваться только по именам, появившиеся в Python 3.0.


# Файл mytimer.py (только для 3.X)

“””
Вместо формы ** и метода pop словарей используются аргументы, которые могут 
передаваться только по именам, появившиеся в версии 3.0.
В версии 3.0 нет необходимости выносить вызов range() за пределы цикла, так как эта 
функция возвращает генератор, а не список
“””
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)

Результат будет идентичен предыдущей версии...

19 апреля 2013 г.

Альтернативные реализации модуля хронометража

Сегодня пятница, пора постить новый урок по программированию на Python.
Появилась новая страница в блоге, на нее не обращайте внимание, это для сэо.

Значит так, урок начинается....

Сегодня рассмотрим альтернативную реализацию модуля хронометража (смотреть предыдущий пост).

Примитивность,минуса предыдущего модуля хронометража с предыдущего поста:

  • В  нем  всегда  используется  функция  time.clock.  В  операционной  системе Windows она является лучшим выбором, однако на платформах в системе UNIX более высокую точность можно получить с помощью функции time.time.

  • Для  изменения  количества  повторений  требуется  изменять  глобальную переменную модуля – не самое идеальное решение, если функция timer импортируется и одновременно используется в нескольких модулях.

  • Функция timer выполняет  тестовую функцию  большое число  раз.  Чтобы учесть случайные флуктуации, вызванные различными уровнями нагрузки на  систему,  можно было бы отбирать  наилучшие результаты  из  серии тестов вместо того, чтобы рассчитывать общее время выполнения.


17 апреля 2013 г.

Хронометраж в Python -e

С помощью хронометража в Python -e, мы научимся измерять время действия любой функции, или же другими словами проверить скорость ее работы, также относится к циклам и т.д. и т.п.

Так вот чтоб все это можно было сделать мы будем использовать модуль Time, который уже есть в инструкциях Python -a.

Для того чтоб все это работало мы создадим и сохраним на долго, утилиту timer.


# Файл mytimer.py

import time
reps = 1000
repslist = range(reps)

def timer(func, *pargs, **kargs):
    start = time.clock()
    for i in repslist:
        ret = func(*pargs, **kargs)
    elapsed = time.clock() - start
    return (elapsed, ret) 

Эта утилита способна вызывать любую функцию с любым количеством аргументов. Она фиксирует начальное время, вызывает функцию фиксированное число раз и вычитает время начала из времени конца.

  • Модуль time из стандартной библиотеки языка Python позволяет получить текущее  время  с  точностью,  зависящей  от  платформы.  В  Windows,  как утверждается, этот  модуль  позволяет получить  время  с точностью до  микросекунды и, следовательно, обеспечивает высокую точность. 
  • Вызов функции range был вынесен за пределы цикла измерения времени, благодаря чему время конструирования диапазона не накладывается на получаемые результаты в Python 2.6. В Python 3.0 функция range возвращает итератор, поэтому в версии 3.0 данный шаг можно считать излишним (хотя он и не мешает).
  • Счетчик reps  оформлен как глобальная переменная, благодаря чему  она 
может изменяться импортирующим модулем при необходимости: mytimer. 
reps = N.

Далее будет подробней...