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

Уменьшить функцию в Python 3: Просто объяснил

💡 Функция уменьшения () из агрегатов модулей модуля Python Functools Итализатор для одного элемента. Он неоднократно сливает два повторных элемента в один, как определено в аргументе функции. Повторяя это, останется только один элемент – возвращаемое значение. https://youtu.be/xx46lma7zqc Минимальный пример Вот минимальный пример: >>> из импорта Functools Уменьшите … Уменьшить функцию в Python 3: просто объяснил Подробнее »

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

💡 Уменьшить () Функция из Python’s Functools Модуль агрегаты, а именно для одного элемента. Он неоднократно сливает два повторных элемента в один, как определено в аргументе функции. Повторяя это, останется только один элемент – возвращаемое значение.

Минимальный пример

Вот минимальный пример:

>>> from functools import reduce
>>> def my_sum(x, y):
	return x + y

>>> values = [1, 2, 3, 4]
>>> total = reduce(my_sum, values)
>>> total
10

Код выполняет следующие шаги:

  • Импорт Уменьшить Функция из Functools библиотека.
  • Определите функцию агрегатора my_sum Отказ
  • Определить Список Значения Отказ
  • Уменьшить Значения до одного значения, передавая его – наряду с функцией агрегатора my_sum – в функцию уменьшения.
  • Результат показывает сумму всех значений в списке.

Синтаксис

Функция уменьшения требует три аргумента:

reduce(function, iterable, initializer=None) 
функция Callable объект Функция, которая принимает два аргумента и возвращает агрегацию обоих значений.
считать ITERABLE (E.G., Список, кортеж, набор) Итализатор должен быть агрегирован в одно значение.
инициализатор Объект Необязательный инициализатор, который служит начальным значением. Если инициализатор дан, первая агрегация происходит между инициализатором и первым ITERABLE элементом. Значение по умолчанию нет.

Аргумент функции определяет, как два значения x и y сводится к одному значению (например, лямбда х, у: х + y ). Таким образом, мы можем итеративно уменьшить два значения ИТЕРИТЕЛЬНО (второй аргумент) до одного значения – до тех пор, пока не осталось только одно значение.

Как написать Python One-Liners с функцией уменьшения

Следующее набирается из моей книги Python «Python One-listers».

Но прежде чем мы будем двигаться дальше, я рад представить вам мою новую книгу Python Python One-listers (Amazon Link).

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

Книга была выпущена в 2020 году с помощью книги по программированию мирового класса Nostarch Press (San Francisco).

Ссылка: https://nostarch.com/pythononeliners.

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

В Python версии 2, функция уменьшения была встроена, поэтому вы можете просто использовать его без импорта какой-либо внешней библиотеки. Тем не менее, создатель Python Guido Van Rossum выталкивал к удалению его в Python 3. В настоящее известный Статья он сделал свое положение ясным: Функция уменьшения редко используется И не обеспечивает большого значения для среднего кодера Python. Поэтому в Python 3 вам нужно сначала импортировать его из Functools библиотека.

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

🧠 Повторение : Функция уменьшения требует три аргумента: Уменьшить (функция, неиспользуемый, инициализатор) Отказ Аргумент функции определяет, как два значения x и y сводится к одному значению (например, лямбда х, у: x + y ). Таким образом, мы можем итеративно уменьшить два значения ИТЕРИТЕЛЬНО (второй аргумент) до одного значения – до тех пор, пока не осталось только одно значение.

Например, звонок Уменьшить (лямбда х, y: x + y, [0, 1, 2, 3]) Выполняет следующие вычисления: (((0+1)+2)+3)=6 .

  • Сначала мы уменьшаем два значения х = 0 и y = 1. к сумме x + y = 0 + 1 = 1 Отказ
  • Затем мы используем этот результат первого звонка лямбда Функция В качестве ввода второго вызова Lambda функции: х = 1 и y = 2. . Результатом сумма х + y = 1 + 2 = 3 Отказ
  • Наконец, мы используем результат этого второго вызова функции лямбда в качестве ввода на третий вызов функции лямбда, установив х = 3 а также y = 3 Отказ Результатом сумма х + y = 3 + 3 = 6 Отказ

В последнем примере вы видели, что значение х Всегда несет результат предыдущего ( лямбда ) функции. Аргумент х Служит накопленным значением, в то время как аргумент Y служит значением обновления от ITERABLE. Это предполагаемое поведение для итеративно «уменьшить» все значения в утешенном аргументе с одним. Дополнительный инициализатор третьего параметра определяет начальный ввод для х Отказ

💡 Функция лямбда – это анонимная функция в Python. Начинается с ключевого слова лямбда , с последующим запятым списком нуля или более аргументов, а затем толстой кишки и возвращаемой экспрессией. Например, лямбда х, у, z: x + y + z будет рассчитать сумму трех ценностей аргумента х + y + z Отказ

Уменьшить функцию для расчета факториала

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

from functools import reduce
print(reduce(lambda x, y: x * y, range(1, 6))) 

Что такое выход этого Python One-lister ?

Я дал эту головоломку до 3,453 кодеров Python в моем Сообщество Finxter Отказ Шесть из них ответили на правильное решение: одноклассник рассчитывает факториальную функцию «5!».

Результат есть

 (((((1 * 2) * 3) * 4) * 5) = 120

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

Уменьшить функцию, чтобы расширить список списка из списка

Давайте продолжим изучать функцию уменьшения функции: что такое выход следующего кода одноклассника? Давайте рассмотрим вчерашнюю головоломку одноклассника:

from functools import reduce
print(reduce(lambda x, y: x + [[z for z in range(y)]], [1, 2, 3, 4], [ ])) 

Да, решение:

[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3]]

Но как работает этот Python One-Liner?

Вы уже знаете о функции уменьшения:

Функция уменьшения итеративно сочетает в себе два значения от именителя, как указано в первом функциональном аргументе. В нашем случае функциональный аргумент является анонимной (лямбда) функция, которая принимает два значения x и y, сочетает в себе их и возвращает результат.

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

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

Тем не менее, значение y до сих пор принимает каждую целочисленное значение списка для уменьшения (то есть второй аргумент функции уменьшения). Итак, у нас есть ,,, и.

Теперь мы неоднократно объединять значение y в список x Отказ По сути, мы создаем новый список, используя Список понимание. Новый список состоит из всех целых ценностей UP к y (эксклюзивно).

Этот новый список затем добавляется в старый список (который был изначально пустым и стабильно растет).

Вот точная процедура для каждого целого числа y в списке, чтобы быть уменьшена: (Правая сторона показывает, как новый список объединен в старый список в каждом уменьшении шага.)

 y=1:    [] + [[0]] = [[0]]
 y=2:    [[0]] + [[0,1]] = [[0], [0,1]]
 y=3:    [[0], [0,1]] + [[0,1,2]] = [[0], [0,1], [0,1,2]] 
 y=4:    [[0], [0,1], [0,1,2]] + [[0,1,2,3]] =  [[0], [0,1], [0,1,2], [0,1,2,3]]

Уменьшить функцию для расчета PowerSet

Мы создадим одноклассное решение, которое рассчитывает PowerSet данного набора S :

# Dependencies
from functools import reduce


# The Data
s = {1, 2, 3}


# The One-Liner
ps = lambda s: reduce(lambda P, x: P + [subset | {x} for subset in P], s, [set()])


# The Result
print(ps(s))

Прежде чем мы будем двигаться дальше, угадайте выходной фрагмент этого кода!

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

Первоначально PowerSet содержит только пустой набор. На каждом этапе мы берем один элемент X из набора данных S и создаем новые подмножества, которые естественным образом появляются, добавив X ко всем подмножеству, которые уже в PowerSet. Поэтому размер PowerSet, поэтому удваивается каждый раз, когда мы рассмотрим дополнительный элемент X из набора данных S. Таким образом, мы можем выращивать PowerSet с N подзвучайными данными элемента набора данных A-A-Time (но по NSOCTS A-A-Time). Обратите внимание, что PowerSet растут в геометрической проведении: для любого нового набора данных элемента x, мы удваиваем размер PowerSet. Это неотъемлемое свойство PowerSetseets: они быстро подавляют любую мощность хранения – даже для относительно небольших наборов данных с несколькими десятками элементов.

Мы используем функцию Уменьшими () для поддержания текущего PowerSet в переменной P (что изначально содержит только пустой набор). Используя понимание списка, функция уменьшения создает новые подмножества – один для каждого существующего подмножества – и добавляет их в PowerSet P. В частности, он добавляет значение x из набора данных в каждое подмножество и, таким образом, удваивает размер PowerSet (содержащий подмножества и без элемента набора данных x). В этом случае , Уменьшите функцию неоднократно «сливаются» два элемента: PowerSet P и элемент х из набора данных.

Следовательно, результат одноклассника является следующим:

# The Result
print(ps(s))
# [set(), {1}, {2}, {1, 2}, {3}, {1, 3}, {2, 3}, {1, 2, 3}]

Этот одноклассник красиво демонстрирует, насколько важно, чтобы у вас было тщательное понимание таких основ, как функции лямбда, понимание списка и заданные операции.

Если у вас нет много времени для изучения Python в течение нескольких часов и часов, присоединяйтесь к моим бесплатным курсу «Coffe Break Python». Я вышлю вам ежедневный урок Python, читы простыни. Это весело (и 100% бесплатно)!

* ** Да, покажите мне, как я могу участвовать! * * *

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

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

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

Оригинал: “https://blog.finxter.com/the-reduce-function-in-python-3-simply-explained/”