Для полной картины не хватает еще и вещей вроде __dict__, __doc__, __ slots__ и т.д. (хоть это и не методы, но статья бы стала почти идеальной)).
Ну, и еще не хватает __prepare__.
from time import time
from functools import reduce
lst = xrange(1,10000000)
r1, r2 = 0, 0
t1 = time()
r1 = reduce(lambda x, y: x + y, lst)
t1 = time() - t1
t2 = time()
for i in lst:
r2 = i + r2
t2 = time() - t2
print(t1)
print(t2)
Но такой вариант очень часто не применим, т.к. нужно использовать уже готовую функцию, а не писать лямбду (или выносить логику в цикл). К тому же, получается, не сильно быстрее:
>qqq.py
1.83299994469
1.74499988556
>qqq.py
1.79699993134
1.79299998283
>qqq.py
1.75500011444
1.81399989128
Но в целом я согласен, код с reduce тяжелее читается.
ну-ну. ссылки на тот сор, я предполагаю, не появится. Если спор был похожий, то там шла речь именно о хвостовой рекурсии, а не о том, какой Питон плохой или хороший
Да, речь там шла о хвостовой рекурсии, но вас так эта тема задевает (неумение питоном TRE), что я сделал выводы о нелюбви к питону ) возможно, вывод неверный.
Не пытайтесь переубедить, у dmitriid претензии не к вашему примеру, а к python вообще. Он приверженец erlang. И приблизительно этот спор уже когда-то был на хабре в какой-то теме о python ) все повторяется )
Вот еще пример trampoline для рекурсии.
Это требует модификации самой функции, так что далеко не везде применимо. Проще тогда переписать саму функцию без использования рекурсии. Для TCO в python полно хаков в виде декораторов, не требущих модификации функций.
Ну, и еще не хватает __prepare__.
Но такой вариант очень часто не применим, т.к. нужно использовать уже готовую функцию, а не писать лямбду (или выносить логику в цикл). К тому же, получается, не сильно быстрее:
>qqq.py
1.83299994469
1.74499988556
>qqq.py
1.79699993134
1.79299998283
>qqq.py
1.75500011444
1.81399989128
Но в целом я согласен, код с reduce тяжелее читается.
>>> 1.0490000248
>>> 2.14700007439
habrahabr.ru/post/147172/
Да, речь там шла о хвостовой рекурсии, но вас так эта тема задевает (неумение питоном TRE), что я сделал выводы о нелюбви к питону ) возможно, вывод неверный.
Это требует модификации самой функции, так что далеко не везде применимо. Проще тогда переписать саму функцию без использования рекурсии. Для TCO в python полно хаков в виде декораторов, не требущих модификации функций.