[Python2.4-2.5. Оптимизация] Забавные факты
Просто через жопу map и lambda сделаны, вот и все. Компилятор должен инлайнить лямбда-функции по мере возможности. Ах да, в Питоне же нет компилятора
Так вроде же даже сам GwR рассказывал, что comprehensions побыстрее map+lambda итп будут. Кстати, а чо psyco пользовать, PyPy еще не вобрал его функциональность в себя? Как там вообще JIT поживает?
Сцуко-диктатор вообще ненавидит лямбды!
Просто через жопу map и lambda сделаны, вот и всеВариант 1:
def f3:
','.join(map(str, args
Время выполнения резко упало и уступило только психованному f2
Вариант 2:
def lf(a):
return str(a)
def f3:
','.join(map(lf, args
Время выполнения примерно сравнялось с реализацией через лямбда.
Отсюда мораль: лямбда вряд ли через жопу сделана (относительно скорости выполнения ).
Апдейт общей морали: не использовать мап с самописными функциями (в том числе лямбда)
Так вроде же даже сам GwR рассказывал, что comprehensions побыстрее map+lambda итп будут.Дай ссылку на текток?
Кстати, а чо psyco пользовать, PyPy еще не вобрал его функциональность в себя? Как там вообще JIT поживает?PyPy, вроде, пока не включает в себя джит, хотя обещают "вот-вот", сам же PyPy "всего лишь" в 2 раза в cреднем (по словам разрабов же) медленнее CPython
Да и вообще, PyPy пока совсем не мейнстрим, стремно с ним работать
Сцуко-диктатор вообще ненавидит лямбды!Да ладно, просто они не вписываются в текущий питоновский синтаксис, а ради лямбд он не готов усложнять его.
вот оно.
В общем, I think dropping filter and map is pretty uncontroversial; filter(P, S) is almost always written clearer as [x for x in S if P(x)], and this has the huge advantage that the most common usages involve predicates that are comparisons, e.g. x==42, and defining a lambda for that just requires much more effort for the reader (plus the lambda is slower than the list comprehension).
О, great thx!
В текущий питоновский синтаксис оно отлично вписывается, а вот в фантазии диктатора — не очень. Но он в чём-то несомненно прав насчёт простоты языка.
В текущий питоновский синтаксис оно отлично вписывается, а вот в фантазии диктатора — не очень.Да неужели?
Ну, предложи мне вариант multi-statement lambda.
Ну, предложи мне вариант multi-statement lambda.То, что такого нет, я понимаю (и то, что в lambda вообще нет ни одного statement хорошо хоть multiline разрешили для выражений. В своих постах я имел в виду то, что те лямбды, которые можно записывать в текущем синтаксисе питона, очень даже в него вписываются, но, тем не менее, диктатор был настроен против них (как сейчас — не знаю).
А из чего тогда ты сделал вывод, что
диктатор был настроен против них?
Лямбда с функционалом в рамках синтаксиса существует, реализация работает, вроде, почти как любая другая самописная nested функция.
А из чего тогда ты сделал выводНу там, насколько я помню, в списках рассылки было несколько довольно горячих обсуждений насчёт выкидывания lambda, map, filter, reduce... Ещё навскидку можно найти пост в блоге. Вот с того момента мне как-то не по себе стало за лямбды, хотя, с другой стороны, точка зрения диктатора видится как достаточно рациональная...
Ну там, насколько я помню, в списках рассылки было несколько довольно горячих обсуждений насчёт выкидывания lambda, map, filter, reduce... Ещё навскидку можно найти пост в блоге. Вот с того момента мне как-то не по себе стало за лямбды, хотя, с другой стороны, точка зрения диктатора видится как достаточно рациональная...Ну, я просто не назвал бы это "против лямбда". Для случаев, когда можно написать "лучше" без лямбда - лямбду убираем. Там, где нельзя - не убираем. Ничего враждебного
К примеру, на каждый случай типа:
try:
_ = gettext('xx','ru')
except IOError,ex:
_ = lambda x: x
никто не будет вводить дополнительную встроенную функцию. Случаев много - обзадолбаются
так что, имхо, никуда она не денется, эта лямбда
Для случаев, когда можно написать "лучше" без лямбда - лямбду убираем. Там, где нельзя - не убираем.Ну к такому подходу только +1, скорее всего
горячих обсуждений насчёт выкидывания lambda, map, filter, reduce...а это зачем? захотелось интерпретируемый аналог паскаля получить?
Ну, почитай ту ссылку на блог; на архивы рассылки мне что-то лень искать, но там реально дофига было и на форумах ещё каких-то точно было... В блоге диктатор вроде более-менее нормально излагает свою позицию, но кратко, в обсуждениях тема выбрасывания лямбд, конечно, лучше раскрывалась.
Оставить комментарий
tipnote
без psyco:
t3-t2 <= t2-t1 < t4-t3
с psyco:
t3-t2 уменьшился в полтора раза
t2-t1 и t4-t3 увеличились в 2
Отсюда вывод: есть возможность по памяти - используйте list comprehensions, а map вообще не используйте
И отсюда же вопрос, что map+lambda так подкачал? Есть мысли?