Автор оригинала: Shubham Sayon.
Проблема: Учитывая, как распечатать его с использованием петли в рамках функции лямбда.
Обзор
В этом руководстве мы узнаем, почему это не умная идея использовать для петли внутри лямбда в Python. Это часто задаваемый вопрос программистами и новичками. Следовательно, он должен быть адресован как можно скорее.
Давайте посмотрим на пример/вопрос, что большинство программистов Newbie сталкиваются с этим, имеющие дело с лямбда Функция и для петлей в питоне. Следующий вопрос – это классический пример путаницы, который вы можете столкнуться с использованием метода лямбда вместе с контуром для цикла.
Пример:
Источник: переполнение стека
Давайте пойдем вперед, выполните этот код в нашей консоли, чтобы узнать, что произойдет!
y = "hello and welcome" x = y[0:] x = lambda x: (for i in x : print i)
Выход:
x_list = list(lambda i: for i in x) ^ SyntaxError: invalid syntax
Причина: Так как для
Цикл – это Заявление он не должен быть включен в лямбда выражение Отказ
✨solution 1: Использование понимания списка
Использование функции лямбда с петли для для цикла, безусловно, не способ подходить к таким проблемам. Вместо этого вы можете просто использовать понимание списка для переоценки заданной строки/списка/коллекции и напечатайте его соответственно, как показано в решении ниже.
y = "hello and welcome" x = y[0:].split(" ") res = [print(i) for i in x]
Выход:
hello and welcome
💡 Быстрый реконструкцию списков.
Понимание списка является компактным способом создания списков. Простая формула – [Выражение + контекст] Отказ Выражение : Что делать с элементом каждого списка? Контекст : Какие элементы для выбора? Контекст состоит из произвольного числа для и, если утверждения. Пример : [X для X в диапазоне (3)]
Создает список [0, 1, 2]
. Рекомендуемое руководство: Понимание списка в Python – полезное иллюстрированное руководство
✨solution 2: Использование списка + карта + лямбда
Еще один обходной путь к нашей проблеме – использовать карта ()
Метод вместе с лямбда
Функция, а затем пописать вывод на Список
Отказ
карта ()
Функция преобразует одну или несколько ейтов в новую, применяя «Функция трансформатора» к I-ю элементам каждой илетности. Аргументы – это Функция трансформатора объекта и один или несколько версий Отказ Если вы пройдете N по темпам В качестве аргументов функция трансформатора должна быть N Функция Принимая N Входные аргументы. Возвращаемая стоимость представляет собой объект ITERABLE MAP из преобразованного и, возможно, агрегированных элементов. Рекомендуемое руководство: Python Map () – Наконец, овладение функцией карты Python
Теперь давайте посмотрим на код/решение:
y = "hello and welcome" x = y[0:].split(" ") res = list(map(lambda x: print(x), x))
Выход:
hello and welcome
✨solution 3: Использование метода записи на Sys.Stdout вместе с методом объединения
Простое решение для решения проблемы состоит в том, чтобы использовать Написать
Метод на sys.stdout
а затем используйте Присоединяйтесь к
Метод на результате отображать выход. Давайте посмотрим на следующие Код Чтобы понять подход:
import sys y = "hello and welcome" x = y[0:].split(" ") res = lambda x: sys.stdout.write("\n".join(x) + "\n") res(x)
Выход:
hello and welcome
С учетом условных заявлений и так и Печать
(в Python 2.x) они не будут работать внутри выражения лямбда. Таким образом, используя Написать
Метод на sys.stdout
Модуль может помочь нам обойти эту проблему.
Если вы задаетесь вопросом о разнице между Печать
и sys.stdout.write
→ Обратитесь к эта ссылка Отказ
Примечание: String.join (ИТЕРАЛ)
Метод объединяет все строковые элементы в считать
(например, список, строка или кортеж) и возвращает результат как новую строку. строка
На котором вы называете это строку разделителя – и он отделяет отдельные элементы. Например, '-'. Присоединяйтесь («Hello ',« мир »])
Возвращает соединенную строку «Привет-мир»
Отказ Рекомендуется прочитать: Список присоединения Python [Ultimate Guide]
🔖 Собесным примером
Решения для приведенного выше примера были простыми. Теперь давайте посмотрим на немного сложный сценарий.
Проблема: Учитывая список чисел, храните четные номера из списка в другой список и умножите каждое число на 5, чтобы отобразить выход.
Реализация вышеуказанной проблемы с использованием цикла A для LOOP довольно проста, как показано ниже.
x = [2, 3, 4, 5, 6] y = [] for v in x: if v % 2: y += [v * 5] print(y)
Выход:
[15, 25]
Но Как вы решите вышеуказанную проблему в одной строке?
Решение уже обсуждалось выше. Есть два способа сделать это:
🏷️method 1: Используя понимание списка
x = [2, 3, 4, 5, 6] y = [v * 5 for v in x if v % 2] print(y) # [15, 25]
🏷️method 2: Используя комбинацию списка + карта + лямбда + фильтр
x = [2, 3, 4, 5, 6] y = list(map(lambda v: v * 5, filter(lambda u: u % 2, x))) print(y) # [15, 25]
Целью вышеуказанного примера является обеспечение того, чтобы вы хорошо разбирались с проблемами, которые включают итерации в одной строке для генерации вывода.
💡tidbit: Когда использовать функции лямбда?
Функции лямбда используются, когда вам нужна функция для краткого таймфрейма. Он также используется, когда вы должны пропустить функцию в качестве аргумента для функций более высокого порядка (функции, которые принимают различные функции в качестве своих аргументов). Давайте посмотрим на пару примеров.
Пример 1:
lst = [1, 2, 3, 4, 5] # Adding 10 to every element in list using lambda lst2 = list(map(lambda i: i + 10, lst)) # Printing the list print("Modified List: ", lst2)
Выход:
Modified List: [11, 12, 13, 14, 15]
Пример 2:
# Using lambda inside another function def foo(no): return lambda i: i + no sum = foo(10) print("Sum:", sum(5))
Выход:
Sum: 15
Чтобы узнать больше о функции лямбда и его использование в Python, пожалуйста, посмотрите на следующие учебные пособия: ➥ Лямбда функции в Python: Простое введение ➥ Лямбда исчисление в Python
Заключение
Таким образом, вышеупомянутое обсуждение показывает, что никогда не бывает не большая идея использовать петлю в пределах выражений лямбда. Вместо этого вы можете использовать обходные пути, которые были предложены выше.
Чтобы продолжать обучение, пожалуйста, подпишитесь и оставайтесь на улице для более интересных дискуссий и учебников.
Рекомендуется: Академия компьютерной науки Finxter
- Вы хотите быстро освоить самые популярные Python IDE?
- Этот курс приведет вас от новичка к эксперту в Пычарме в ~ 90 минут.
- Для любого разработчика программного обеспечения имеет решающее значение для освоения IDE хорошо, писать, тестировать и отлаживать высококачественный код с небольшим усилием.
Присоединяйтесь к Pycharm MasterClass Сейчас и мастер Pycharm на завтра!
Я профессиональный Python Blogger и Content Creator. Я опубликовал многочисленные статьи и создал курсы в течение определенного периода времени. В настоящее время я работаю полный рабочий день, и у меня есть опыт в областях, таких как Python, AWS, DevOps и Networking.
Вы можете связаться со мной @:
Оригинал: “https://blog.finxter.com/python-for-loop-inside-lambda/”