Примерчик-то не совсем корректный, dimy44, а ? Ты же понимаешь, что сто тыщ раз вызывать конструктор пусть даже неизменяемого типа, как кортеж, влечет накладные расходы.
Вот мой примерчик в аттаче, ну и прямо здесь запостить нужно, файлы-то долго не живут:
def foo(): pass
def func():
from time import clock # локальный импорт; дергать модуль из глобальной области видимости в цикле в функции для замера производительности плохая идея
funcs = [foo, lambda: None]
## если список функций "func" не локальный, то можно сделать локальную ссылку на него, тоже ускорит доступ к нему и к функциям:
## local_funcs = func
p = 0
t= clock()
while p < 100000:
funcs[0]()
p += 1
result = clock() - t # сразу выводить результат плохо, потому что неизвестно, сколько работы-времени тратится на поиск текущего объекта вывода (sys.stdout)
print 'example #1: %f sec.' % result
def func1():
from time import clock
local_foo = foo
## обязательно нужно создать локальную ссылку, ведь в "func" с помощью
## funcs = [foo, lambda: None]
## ускоряется доступ к функциям
p = 0
t = clock()
while p < 100000:
if p >= 0:
local_foo()
p += 1
result = clock() - t
print 'example #2: %f sec.' % result
func()
func1()
# example #1: 1.984375 sec.
# example #2: 2.125000 sec.
## При лучших тестах второй пример отстает всего на несколько сотых, но у меня чаще наблюдается именно такое отставание, где-то полторы-две десятых.
## Несущественное, имхо.
# wbr, Virtuos86
Прикрепленный файл #1: 452_synthetic_tests.zip | скачать с зеркала | (967 b)
-------------
добавлено в 02.43: '%s' % str(obj) лишняя писанина
%s сам по себе говорит, что к объекту нужно применить функцию str и результат поместить в строку: '%s' % obj
Так же как %r намекает на repr.
А вот уже %d, %i и %f требуют всенепременно число.
---
Да и тесты-то синтетические. В реале редко 100500 раз вызываешь в цикле функцию. Нужно в каждом конкретном случае решать, сэкономить на лишнем коде, или на скорости его выполнения. Редко более краткий вариант бывает более быстрым. За исключением встроенных функций и модулей расширений, ну и списковых встраиваний.
ответ опубликован:
Рейтинг: 5
голосов: 2
- 5
- 1
- 2
- 3
- 4
- 5