Ниже приведены скорости различных версий на ноутбуке Mac старого образца:
$ py26 -mtimeit -s'domain = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]' 'sum(filter(lambda n : n % 2 == 0, domain))'
100000 loops, best of 3: 4.41 usec per loop
$ py26 -mtimeit -s'domain = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]' 'sum([n for n in domain if n % 2 == 0])'
100000 loops, best of 3: 2.69 usec per loop
$ py26 -mtimeit -s'domain = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]' 'sum(n for n in domain if n % 2 == 0)'
100000 loops, best of 3: 2.86 usec per loop
Обратите внимание, что, хотя версия genexp, без сомнения, более крутая, listcomp равен немного быстрее (вероятно, недостаточно, чтобы беспокоиться, если этот код не находится в тесном внутреннем цикле, из которого вы стремитесь оптимизировать сопли ;-).Как обычно, основанная на lambda
версия существенно медленнее, как уже упоминали другие, - lambda
является своего рода «плохим отношением» в Python :-(. ((Не то чтобы функция с def
ined могла бы заметно работатьлучше и здесь))