Как стать автором
Обновить

Комментарии 12

#6 это жесть. Квадратное колесо едет плохо, но если мы возьмём 2 таких колеса вместе, то станет чуток лучше. Питон это не про краткость, а про читаемость. Я понимаю что это синтетические примеры... Но скорость разработки, основное преимущество питона, нивелируется такими конструкциями! Попробуй потом пойми, что имел ввиду автор...

Весь Питон состоит из одних квадратных колёс.

Питер, вам не стыдно? Давайте ещё статью о том как объявлять переменные опубликуем на Хабре. Более того, в статье даются откровенно вредные советы.

Из коротенького параграфа документации посвящённому лямбда-функциям:

Small anonymous functions can be created with the lambda keyword.  Semantically, they are just syntactic sugar for a normal function definition.

Код вроде этого в корне не верен:

sorted_list = lambda x: (sorted(i) for i in x)
second_largest = lambda x, func: [y[len(y)-2] for y in func(x)]

Давайте ещё статью о том как объявлять переменные опубликуем на Хабре.

Гм... Интересная идея. Особенно, если не ограничиваться Питоном и немножно "залезть в потроха". Как хранится, как передаётся, выделение памяти, сборщики мусора... Тут можно копать и копать.

а мне стать в самый раз, отправил сыну, написано очень доступно

а кто-нибудь может сказать зачем нужна вот эта жесть:

tables = [lambda x = x: x*10 for x in range(1, 11)]
for table in tables:
    print(table())

если проще написать без всяких лямбд:

tables = [x*10 for x in range(1, 11)]
for table in tables:
    print(table)


Ну, тут наверно просто хотели показать идею “ленивого вычисления”(или как там правильно перевести lazy evaluation?) . 

В первом случае первая строчка создает только массив лямбд, а конкретные значения получаются позже, когда мы эти лямбды выполняем: table().

Ну как-бы наверно, да. Если бы не одно но. В питоне лямбды настолько кастрированные, что в 99% случаев нет никакого смысла вычислять их лениво...

Тут на самом деле есть неочевидная засада. Если вместо:

tables = [lambda x = x: x*10 for x in range(1, 11)]

Написать лямбду без параметров (нам ведь они потом не нужны):

tables = [lambda: x*10 for x in range(1, 11)]

то получится ерунда.

А про генераторы никто не забыл?

Лямбда класс/интерфейс я понимаю. Джавист. Но вот до лямбда функций си# пайтона, так и не догнал. Науя? Чтобы не обьявить пару лишних переменных внутри метода? Может я - дурак. Но это все анти паттерн ООП. Переписывыл такие методы с шарпа на джаву. Надо было в метод вложить метод с кучей параметров и дерево безгранично в итоге.

Про функционалку и стримы в джава ничего против не имею. Я лишь про вопиющие приемы конкретно пайиона и шарпа

Для извращений не особо они ограничены синтаксически.

funk = lambda x, b ,fu= lambda b: b**2: print(x,fu(b))
funk(9,9) # 9 81

Зарегистрируйтесь на Хабре, чтобы оставить комментарий