Добро пожаловать, здесь я программирую бессмысленно и беспощадно
"Многострочные" лямбды в Python
Запись от nekit270 размещена 09.12.2023 в 02:36
Лямбда-функции в Python имеют ряд ограничений:
Но эти ограничения можно обойти! Сразу дам ответ на вопрос "Зачем?" - просто так. Просто захотелось сделать возможным то, что разработчики языка в него не закладывали. Для начала - ограничение на одну команду. Его легко обойти, используя eval() в связке с генератором списка. Из списка можно взять последний элемент, тогда возвращаемым значением лямбды станет последняя выполненная команда. Пример:
Код:
Строка 1 Строка 2 Лямбда вернула 42 Пример:
Код:
Введите число: 5 Число, возведенное в квадрат: 25 P.S. Этот способ был найден мной при создании однострочного приложения на Tkinter, если интересует - могу и про него статью написать. |
Всего комментариев 4
Комментарии
-
Цитата:Сразу дам ответ на вопрос "Зачем?" - просто так. Просто захотелось сделать возможным то, что разработчики языка в него не закладывали....
если интересует - могу ... статью написать.Запись от sqltd1 размещена 09.12.2023 в 08:39 -
вы кажется сами придумываете себе сложности и сами с ними боретесь. Про использование евал и создание ненужного списка даже не буду говорить, но вот ваш пример без него, а просто понимая как работает булева логика.
если прочтете книгу Мерца о функциональных возможностях питона, внезапно сможете в лямбде и цикл написать, и рекурсию использоватьPython 1 2 3 4 5
>>> x = lambda: print("Строка 1") or print("Строка 2") or 42 >>> print('Лямбда вернула', x()) Строка 1 Строка 2 Лямбда вернула 42
Запись от Welemir1 размещена 09.12.2023 в 13:35 -
Запись от Welemir1 размещена 09.12.2023 в 13:35
Обновил(-а) Welemir1 09.12.2023 в 13:36 (повтор) -
Цитата:
Возможно, есть и более простые способы, но смысл был как раз придумать еще один, пусть и не самый хороший
UPD: Ваше решение с or не работает, если команды возвращают что-либо, кроме None, False и им подобных:
Результат:Python 1 2 3 4 5
def foo(): return 92 x = lambda: print('Строка 1') or foo() or print('Строка 2') or 42 print('Лямбда вернула', x())
Код:Строка 1 Лямбда вернула 92
Запись от nekit270 размещена 09.12.2023 в 13:52