а в 3 есть нормальные Dictionary Comprehensions {i: chr(65+i) for i in range(4)}
reduce() ушел в модуль functools
xrange() стал просто range()
dict.keys(), dict.items(), dict.values() теперь возвращают не список, а (???)вид (view).
И вообще, когда мир решит, что стоит писать «гайды» уже для python 3.*?
А вот reduce для пустого элемента вернет ошибку, что не очень удобно. Если бы он мог принимать помимо лямбды и собственно массива еще «значение» по умолчанию, такой проблемы бы не было. Жду следующей статьи.
Пока для себя уяснил, что ruby хоть и медленней, но такие вещи как any, all, проход по массиву, reduce сделаны гораздо красивее.
Гвидо ФП не очень жалует, хотел из py3k чуть ли не map выкинуть, т.к. считает, что практически все эти трюки скорее снижают понятность кода, а не повышают ее. Из-за этого же лямбды такие урезанные, чтобы разработчики писали не «крутой» код, а понятный код.
Пописал месяц на js, где ФП-составляющая не урезанная, захотелось после этого попробовать ruby. Но вместе с тем осознаю, что в питоне из-за всех этих ограничений код и правда проще/понятнее получается, в них, определенно, есть смысл.
а я вот зашел на docs.python.org и прочитал про reduce: reduce(function, iterable[, initializer])
...If the optional initializer is present, it is placed before the items of the iterable in the calculation, and serves as a default when the iterable is empty…
Что означает: Если не обязательный параметр initializer присутствует, то он подставляется в вычислениях перед элементами iterable, а также служит значением по умолчанию, если iterable пуст
А у меня завтра собеседование по поводу python-разработки! Прочитал, немного порадовался с той стороны, что всё это знаю, а с другой огорчился, что не знаю как сделать более глубокое погружение в язык.
Спасибо за статью, я как то all и any упустил.
Я бы добавил, что в enumerate появился параметр start, так что первый индекс может отличаться от нуля.
И, думаю, раз уже начали рассказывать разные вкусности по работе со списками, то следует затронуть модуль itertools
использование iteritems/itervalues/iterkeys (вместо их неитерационных аналогов) могут значительно ускорить работу в CPython.
использование items/values/keys порождает новые структуры и (часто) увеличивает ref counts на элементы материнского словарика. В результате может образоваться плохо воспроизводимое замедление, у меня бывало замедление более 10раз.
Python Tips, Tricks, and Hacks (часть 2)