Рубрики
Без рубрики

О статье Гвидо: «Судьба уменьшения () в Python 3000»

Вчера я получил отличный вопрос из одного из моих «Coffe Break Python» по адресам курса электронной почты: я однажды прочитал, что {Список, словарь, кортеж} понимание может заменить любой код лямбда. Это правда? Лямбда, фильтр, карта действительно необходима? — Albrecht, Tinxter Creator Python, Guido Van Rossum, не любит функциональное программирование. Это хорошо известно. … О статье Гвидо: «Судьба уменьшения () в Python 3000» Подробнее »

Автор оригинала: Chris.

Вчера у меня был отличный вопрос от одного из моих «Coffee Break Python» Readers по электронной почте:

Однажды я прочитал, что {список, словарь, кортеж} понимание может заменить любой лямбда. Это правда? Это лямбда , Фильтр , карта действительно важно?Альбрехт С Член Finxter

Python Creator, Guido Van Rossum, не любит функциональное программирование. Это хорошо известно.

Гвидо : «Я ценим читаемость и полезность для реального кода. Есть несколько мест, где карта () и Фильтр () Иметь смысл, а для других мест Python имеет список поступлений. Я закончил ненавидеть Уменьшить () Потому что это было почти исключительно использовано (а) для реализации сумма () или (b) писать нечитаемый код. Итак, мы добавили встроенные сумма () В то же время мы демотировали Уменьшить () от встроенного до чего-то в Functools (который является сбросом для вещей, я не забочусь:-). »

Это то, что Guido предназначено при утверждении о том, что Уменьшить () Функция в основном используется в качестве замены для сумма () :

from functools import reduce
print(reduce(lambda x, y: x + y, range(1, 6))) 
# 15

Функция уменьшения требует два аргумента: функция, которая принимает два аргумента и возвращает одно значение и итеративное. Затем он неоднократно применяет функцию к двум значениям от того, как не осталось только одно значение. Не стесняйтесь изучать свое руководство по блогу по поводу функции уменьшения (5 минут чтения).

Хотя функция, по-видимому, будет полезна, большинство людей не находятся на практике непрерывных применений. Они используют функцию для расчета суммы всех значений в итеративной – но это она.

Однако та же самая целя может быть легко достигнута со встроенными функциями сумма () :

print(sum(range(1,6)))
# 15

Вот почему Гвидо инициировал для удаления Уменьшить Из Python 3 (в Python 2 функция уменьшения представляет собой встроенную функцию). Вот знаменитая статья где Гвидо описывает его аргументы против Уменьшить ( и лямбда , карта () и Фильтр () ). Изучите эту статью полностью, каждый эксперт Python знает об аргументах в статье)!

Гикологические аргументы против лямбда, карты (), фильтра () и уменьшения ()

Guido имеет несколько конкретных аргументов против включения этих функциональных элементов программирования на языке Python:

[Аргумент 1] Фильтрация лучше выполнена со списком пониманием.

Вот пример функции фильтра:

customers = ["Alice", "Bob", "Frank", "Ann"]
a = filter(lambda x: x[0] == "A", customers)

print(list(a))
# ['Alice', 'Ann']

Мы избавимся от всех клиентов, которые не начинают с персонажа «А» Отказ Однако это может быть легко достигнуто с помощью следующего утверждения:

a = [ x for x in customers if x[0] == "A" ]

print(a)
# ['Alice', 'Ann']

Помимо немного короче, утверждение понимания списка также быстрее и не требует определения отдельной лямбда функция.

Обратите внимание, что если вы должны обновить свои навыки понимания списка, не стесняйтесь читать об этом комплексном руководстве в моем блоге.

[Аргумент 2] То карта() Функция также может быть заменена путем понимания списка

Вот пример карта () Функция:

customers = ["Alice", "Bob", "Frank", "Ann"]
lst1 = map(lambda x: x[0], customers)
print(list(lst1))
# ['A', 'B', 'F', 'A']

Первый аргумент функции MAP () представляет собой функцию (лямбда), а второй аргумент – это счетчик. Первый аргумент определяет, как каждый элемент от уравновешиваемого должен быть преобразован (сопоставлен).

Тем не менее, это может быть лучше достигнуто со списком понимания (и это также более эффективно):

lst2 = [ x[0] for x in customers ]
print(lst2)
# ['A', 'B', 'F', 'A']

Это решение более читаемо, требуется меньшее количество символов и более эффективно. Это не мозговой, этот список понимания – это путь здесь.

[Аргумент 3] с фильтр() , карта() , а также уменьшать() ушел, основной аргумент лямбда вокруг ушел тоже.

лямбда Иногда используется функция, чтобы указать функции обратного вызова (например, для Tkinter пользовательские интерфейсы). Однако в этих случаях вы можете (и чаще всего: должен явно определить функцию обратного вызова.

Почему вы все равно должны изучать эти функции

Но это не меняет тот факт, что вы должны знать эти функции!

Функция лямбда полезна (хотя и не требуется – вы можете определить каждую функцию, используя def Ключевое слово Хотя это уменьшило бы читаемость во многих случаях IMO).

Многие люди продолжают использовать их – особенно те, кто приходит из функционального программирования. Вы можете спорить против многих слов на английском языке, но до тех пор, пока люди используют их, это не помогает. Вам нужно изучить эти слова, чтобы иметь возможность хорошо общаться.

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Оригинал: “https://blog.finxter.com/about-guidos-fate-of-reduce-in-python-3000/”