Отличие лямбда функции от функции
Язык Python позволяет задавать объекты функции в виде выражений. В этом случае ключевое слово def заменяется ключевым словом lambda .
Различие между использованием def и lambda заключается в том, что в случае с def выражение связывает имя с функцией, а в случае использования lambda выражение возвращает функцию.
Общая форма объявления lambda-выражения следующая:
- argument1 , argument2 , argumentN — имена аргументов, которые использует lambda-выражение;
- expression — непосредственно лямбда-выражение.
Проанализировав общую форму лямбда-выражения, можно прийти к следующим выводам:
- лямбда-выражения записываются в одной строке. Если попытаться поместить выражение expression в другую строку, то компилятор выдаст ошибку;
- лямбда-выражения создают функции, которые не имеют имени. Такие функции называются анонимными функциями.
2. Случаи использования лямбда-выражений
После того, как лямбда-выражение объявлено, оно может быть использовано в следующих случаях:
- как функция. Это случай, когда лямбда-выражение присваивается некоторому имени. Затем с этим именем происходит вызов лямбда-выражения;
- как элемент (литерал) кортежа или списка;
- как элемент (литерал) словаря, который по требованию выполняет некоторое действие. В этом случае формируется так называемая таблица переходов.
3. Отличия между объявлением и использованием лямбда-выражений ( lambda ) и функций ( def )
Между объявлением и использованием лямбда-выражений и функций существуют следующие различия:
- лямбда-выражение объявляется с помощью ключевого слова lambda . Функция объявляется с помощью ключевого слова def ;
- лямбда-выражения — это выражения, def — это инструкции. Это означает, что лямбда-выражение может быть использовано там, где не допускается использование def : внутри литералов или вызовах функций;
- лямбда-выражение содержит только одно выражение, которое возвращается. Результат вычисления выражения является результатом лямбда-выражения. Для возвращения результата из лямбда-выражения не нужно использовать инструкцию return ;
- в отличие от объявления функций ( def ) лямбда-выражения предназначены для вычисления более простых фрагментов кода по сравнению с функциями;
- программный код лямбда-выражения формируется в виде одной строки. Программный код функции может содержать большое количество строк.
4. Преимущества использования лямбда-выражений
Использование лямбда-выражений дает следующие преимущества:
- лямбда-выражения удобны для создания функций, имеющих небольшие размеры;
- лямбда-выражения упрощают программный код, в который нужно встраивать небольшие фрагменты;
- программный код может удобно использовать лямбда-выражение вместо определения функций там где нужно;
- лямбда-выражения обеспечивают так называемую близость кода. Анонимные инструкции размещаются рядом в программе, что повышает ее читабельность и восприятие и не требует использования дополнительных имен (как в случае с функциями). Уменьшение количества имен в программе снижает возможные конфликты этих имен с другими именами в файле модуля.
5. Примеры, демонстрирующие самые простые лямбда-выражения. Различия между инструкциями def и lambda . Вызов лямбда-выражений как имен
В нижеследующих примерах продемонстрировано:
- объявление лямбда-выражения и его присвоение некоторому имени;
- вызов (использование) лямбда-выражения по имени;
- различия между объявлением и использованием функций ( def ) и лямбда-выражений ( lambda ).
Пример 1. Вычисление произведения трех чисел.
Затем вызов лямбда-выражения с конкретными значениями (a = 2, b = 5, c = 5) присваивается имя (объекта) resLambda
В результате, в объекте resLambda содержится произведение чисел 2*5*5 = 50.
Пример 2. Лямбда-выражение, которое возвращает модуль комплексного числа.
Результат выполнения программы
Пример 2. Формируется кортеж, в котором элементы умножаются на разные числа. Продемонстрировано использование кортежа для строки.
Результат выполнения программы
7. Примеры использования лямбда-выражений для формирования таблиц переходов в словарях
Пример 1. Использование лямбда-выражения для формирования таблиц переходов.
Сформировать таблицу переходов (словарь), в которой по номеру дня недели выводится его название. Продемонстрировать работу созданной таблицы.
Пример 2. Формируется таблица переходов (словарь) Area , в которой вычисляется площадь известных фигур.
Результат выполнения программы
8. Можно ли в лямбда-выражениях использовать стандартные операторы управления if , for , while ?
Ответ: нет.
В чем разница между функцией и лямбда?
I wonder if 'lambda' has some esoteric meaning, seeing that the Greek letter lambda (λ) appears in so many avatars on this site. Можно было бы надеяться, что это будет связано с лямбда-исчислением, но у меня странное чувство, что Half Life виноват в лямбда-аватарах.
Различие между ключевым словом lambda схемы и ключевым словом функции Javascript заключается в том, что последнее можно использовать для создания как анонимных функций, так и именованных функций, тогда как первое создает только анонимные функции (и вы будете использовать define для создания именованных функций).
Это очень грубо. Вы используете define (или let один из его родственников, или внутреннее определение) для создания имен - вот и все. Там нет ничего особенного в define отношении функций.
@EliBarzilay Ну, define действительно имеют специальную форму для определения функций (например , вы можете написать (define (f x) (foo)) вместо (define f (lambda (x) (foo))) ), но моя точка зрения в том , что вы не можете создать именованный функцию , используя lambda один, то вы не можете написать что - то вроде (lambda f (x) (foo)) определить функцию с именем f это принимает один аргумент, как вы можете с function ключевым словом Javascript .
define имеет это как синтаксический сахар, так что это не так важно, как его роль инструмента привязки имени для всех значений. Что касается lambda не создания имени само по себе: это важная особенность, поскольку она отделяет присвоение имен от форм функций . IMO JS делает правильную вещь, разрешая разделение, одновременно принимая необязательное имя для тех масс, которые были бы в ужасе от идея функции без имени. (И, к счастью, размер этих масс в целом уменьшается . )
Лямбда - это просто анонимная функция - функция без имени.
Примечание. Лямбда может содержать состояние (как в замыкании), что они попадают в контекст, в котором они объявлены.
То же самое можно сказать и с именованной функцией, если язык позволяет вам объявлять вложенные функции.
Не совсем, lambda выражение в Scheme похоже на function выражение без имени, но ничто не мешает вам позже дать ему имя. Например var f = [function(x)][0] . Можно утверждать, что само значение функции не имеет имени, но это было бы верно для всех функций .
По сути, лямбда - анонимная функция.
Лямбда-выражения можно разбить на выражение лямбда и выражение лямбда
Оператор лямбда аналогичен выражению лямбда, за исключением того, что оператор (ы) заключены в фигурные скобки:
Когда мы говорим о лямбда-выражениях в JavaScript, это просто означает использование функции в качестве аргумента при вызове другой функции.
+1 Многие люди упоминали, что лямбды - это анонимные функции, но это еще не все. Тело (правая часть) лямбды часто является выражением, а не блоком операторов. Тело именованной функции, являющейся выражением, обычно разрешено (или требуется) в функциональных языках, но не в императивных языках.
TL; DR Как указывали другие: лямбда-нотация - это просто способ определения функций без необходимости давать им имя.
Длинная версия
Я хотел бы подробнее остановиться на этой теме, потому что я нахожу это очень интересным. Отказ от ответственности: я взял курс на лямбда-исчисление давным-давно. Если кто-то с более глубокими знаниями обнаружит какие-либо неточности в моем ответе, не стесняйтесь помочь мне улучшить его.
Давайте начнем с выражений, например, 1 + 2 и x + 2 . Такие литералы, как 1 и 2 , называются константами, поскольку они связаны с конкретными фиксированными значениями.
Такой идентификатор x называется переменным, и для его оценки вам необходимо сначала привязать его к некоторому значению. Таким образом, в основном вы не можете оценить, x + 1 пока вы не знаете, что x есть.
Лямбда-нотация обеспечивает схему для привязки определенных входных значений к переменным. Лямбда - выражение может быть сформировано путем добавления λx . в передней части существующего выражения, например λx . x + 1 . Переменная x называется свободным в x + 1 и связаны в λx . x + 1
Как это помогает в оценке выражений? Если вы передаете значение лямбда-выражению, например, так
затем вы можете оценить все выражение, заменив (связав) все вхождения переменной x значением 2:
Итак, лямбда-нотация обеспечивает общий механизм для привязки вещей к переменным, которые появляются в блоке выражения / программы. В зависимости от контекста это создает совершенно разные понятия в языках программирования:
Помимо различий, лямбда-нотация заключается в определении формальных параметров и их привязке к фактическим параметрам.
Следующий шаг - дать имя функции / процедуре. В нескольких языках функции являются значениями, как и любые другие, поэтому вы можете дать функции имя следующим образом:
Как отметил Эли Барзилай, эти определения просто связывают имя f со значением, которое оказывается функцией. Таким образом, в этом отношении функции, числа, строки, символы - это все значения, которые могут быть связаны с именами одинаково:
В этих языках вы также можете привязать функцию к имени, используя более знакомую (но эквивалентную) запись:
Некоторые языки, например C, поддерживают только последние обозначения для определения (именованных) функций.
Затворы
Несколько заключительных замечаний относительно замыканий . Рассмотрим выражение x + y . Это содержит две свободные переменные. Если вы связываете, x используя лямбда-нотацию, вы получаете:
Это не (пока) функция, потому что она все еще содержит свободную переменную y . Вы можете сделать из него функцию, связав y также:
который так же, как + функция.
Но вы можете связать, скажем, y по-другому (*):
Результатом применения функции incrementBy к числу является замыкание, то есть функция / процедура, тело которой содержит свободную переменную (например y ), которая была связана со значением из среды, в которой было определено замыкание.
Так же incrementBy 5 как и функция (замыкание), которая увеличивает числа на 5.
НОТА (*)
Я немного обманываю здесь:
поэтому механизм связывания такой же. Интуитивно я думаю, что замыкание представляет часть более сложного лямбда-выражения. Когда это представление создано, некоторые из привязок материнского выражения уже были установлены, и замыкание использует их позже, когда оно будет оценено / вызвано.
Я только начинающий, но я думаю, что это может немного сбить с толку, если вы пытаетесь понять исчисление λ в математическом смысле, поскольку то, что вы называете константами, называется переменными и обозначается символами a, b, c . Что вы переменные вызова будут неопределенной переменной х . С другой стороны, 1 есть λ f x . f x , 2 является λ f x . f ( f x ) и так далее.
Что такое лямбда в мире компьютерных наук для человека без опыта работы в области компьютерных технологий?
см это для того, как лямбда - функции выглядят на разных языках, и в каком году они были введены в этих языках.
Лямбда происходит от лямбда-исчисления и относится к анонимным функциям в программировании.
Почему это круто? Это позволяет вам писать функции быстрого выбрасывания, не называя их. Это также обеспечивает хороший способ писать замыкания. С этой силой вы можете делать такие вещи.
питон
Как видно из фрагмента Python, функция adder принимает аргумент x и возвращает анонимную функцию или лямбду, которая принимает другой аргумент y. Эта анонимная функция позволяет вам создавать функции из функций. Это простой пример, но он должен передать силу лямбды и замыкания.
Примеры на других языках
Perl 5
JavaScript
JavaScript (ES6)
Схема
стриж
PHP
Haskell
Ява увидеть этот пост
Lua
Котлин
Рубин
Ruby немного отличается тем, что вы не можете вызывать лямбду, используя тот же синтаксис, что и при вызове функции, но он все еще имеет лямбду.
Ruby - это Ruby, для ламбд есть сокращение, поэтому вы можете определить adder это следующим образом:
р
@Maxpm функтор может быть стандартным объектом с полями и функциями экземпляра, тогда как лямбда-функция обычно состоит только из одной строки инструкций. Это может варьироваться в зависимости от языка, конечно.
Я не думаю, что точно точно следует сказать, что лямбда-функции такие же, как анонимные функции. Для некоторых языков, таких как JavaScript, лямбда-выражение - это особая форма анонимной функции. Приведенный вами пример JavaScript - это анонимная функция без лямбда-синтаксиса, тогда как приведенный вами пример JavaScript (ES6) - это лямбда-выражение.
@KyleDelaney действительно, анонимность не является обязательным условием для лямбды, действительно есть лямбда-функции, которые не являются анонимными, как вы указываете на них даже в примере
Лямбда - это тип функции, определенный в строке. Наряду с лямбдой у вас также обычно есть некоторый тип переменной, который может содержать ссылку на функцию, лямбду или другое.
Это вызывает калькулятор, передавая не только два числа, но и какой метод вызывать внутри калькулятора, чтобы получить результаты расчета.
Я бы предложил Console.WriteLine("Calculator: op " + op.Method.Name + " (" + a + ", " + b + ") text-muted font-weight-lighter"> — 23
Как бы ни был удивителен принятый ответ - помочь людям на разных языках, я чувствую, что этот ответ помогает мне лучше понять преимущества лямбд и то, как они отличаются от стандартной функции. Я ясно вижу здесь преимущество лямбды перед предыдущими методами для получения аналогичного результата.
Спасибо за ваш пример, более сложная функция помогает понять преимущества лямбда-выражений гораздо больше, чем простые функции, где, похоже, вы не получаете особой оптимизации
Простой пример (используя Scala для следующей строки):
где аргумент foreach метода является выражением для анонимной функции. Вышеприведенная строка более или менее совпадает с написанием чего-то подобного (не совсем реальный код, но вы поймете):
за исключением того, что вам не нужно беспокоиться о:
- Объявление функции где-то еще (и необходимость искать ее при повторном рассмотрении кода позже).
- Называя что-то, что вы используете только один раз.
После того, как вы привыкли работать со значениями, необходимость обходиться без них кажется столь же глупой, как и необходимость называть каждое выражение, например:
вместо того, чтобы просто написать выражение, где оно вам нужно:
Точная запись варьируется от языка к языку; Греческий не всегда требуется! ;-)
Это относится к лямбда-исчислению , которое является формальной системой, которая просто имеет лямбда-выражения, которые представляют функцию, которая принимает функцию в качестве единственного аргумента и возвращает функцию. Все функции в лямбда-исчислении относятся к этому типу, т.е. λ : λ → λ .
Лисп использовал лямбда-концепцию для именования литералов своих анонимных функций. Эта лямбда представляет функцию, которая принимает два аргумента, x и y, и возвращает их произведение:
Это может быть применено в строке, как это (оценивается до 50 ):
Лямбда-исчисление является последовательной математической теорией замещения. В школьной математике можно увидеть, например, в x+y=5 паре с x−y=1 . Наряду со способами манипулирования отдельными уравнениями также возможно объединить информацию из этих двух, при условии, что подстановки между уравнениями выполняются логически. Лямбда-исчисление кодифицирует правильный способ сделать эти замены.
Учитывая, что y = x−1 это допустимая перестановка второго уравнения, это: λ y = x−1 означает функцию, заменяющую символы x−1 для символа y . Теперь представьте себе применение λ y к каждому члену в первом уравнении. Если термин - y тогда выполнить замену; иначе ничего не делать. Если вы сделаете это на бумаге, вы увидите, как применять это λ y сделает первое уравнение разрешимым.
Это ответ без какой-либо информатики или программирования.
Вот как квадратная функция может быть определена в императивном языке программирования (C):
Переменная x является формальным параметром, который заменяется фактическим значением, которое должно быть возведено в квадрат при вызове функции. На функциональном языке (Схема) такая же функция будет определена:
Во многом это отличается, но все равно использует формальный параметр x таким же образом.
Немного упрощено: лямбда-функция - это функция, которая может быть передана другим функциям, и ее логика доступна.
LinqToSql может прочитать эту функцию (x> 15) и преобразовать ее в фактический SQL для выполнения с использованием деревьев выражений.
Заявление выше становится:
Это отличается от обычных методов или анонимных делегатов (которые на самом деле просто магия компилятора), потому что они не могут быть прочитаны .
Теперь дерево выражений не может быть прочитано - SomeComplexCheck не может быть разбит. Оператор SQL будет выполняться без где и каждая строка в данных будет пропущена SomeComplexCheck .
Лямбда-функции не следует путать с анонимными методами. Например:
Анонимные методы не могут быть прочитаны, и поэтому логика не может быть переведена, как это возможно для лямбда-функций.
Может кто-нибудь объяснить? Я понимаю основные концепции, стоящие за ними, но часто вижу, что они используются взаимозаменяемо, и я запутываюсь.
И теперь, когда мы здесь, чем они отличаются от обычной функции?
Лямбды - это языковая конструкция (анонимные функции), замыкания - это метод реализации для реализации первоклассных функций (анонимных или нет). К сожалению, это часто путают многие люди.
Ответ SasQ превосходен. ИМХО, этот вопрос был бы более полезным для пользователей SO, если бы он направлял зрителей к этому ответу.
Лямбда просто анонимная функция - функция , определенная без имени. В некоторых языках, таких как Scheme, они эквивалентны именованным функциям. Фактически, определение функции переписывается как внутренняя привязка лямбды к переменной. В других языках, таких как Python, между ними есть некоторые (довольно ненужные) различия, но в остальном они ведут себя так же.
Замыкание любая функция , которая закрывает над на окружающую среду , в которой она была определена. Это означает, что он может обращаться к переменным, отсутствующим в его списке параметров. Примеры:
Это приведет к ошибке, потому func что не закрывается в среде anotherfunc - h не определено. func только закрывается над глобальной средой. Это будет работать:
Поскольку здесь func определено в anotherfunc и в Python 2.3 и более поздних версиях (или некотором подобном числе), когда они почти получили правильные замыкания (мутация по-прежнему не работает), это означает, что оно закрывается над anotherfunc средой и может обращаться к переменным внутри Это. В Python 3.1+, мутация тоже работает при использовании на nonlocal ключевое слово .
Еще один важный момент - func будет продолжать закрывать над anotherfunc средой, даже если она больше не оценивается в anotherfunc . Этот код также будет работать:
Это напечатает 10.
Это, как вы заметили, не имеет ничего общего с лямбдами - это два разных (хотя и связанных) понятия.
Клаудиу, насколько я знаю, питон никогда не получал правильных закрытий. Они исправили проблему изменчивости, пока я не смотрел? Вполне возможно .
@AlexanderOrlov: Это и лямбды, и затворы. В Java раньше были замыкания через анонимные внутренние классы. Теперь эта функциональность стала проще синтаксически с помощью лямбда-выражений. Так что, вероятно, наиболее важным аспектом новой функции является то, что теперь есть лямбды. Это не правильно называть их лямбдами, они действительно лямбды. Почему авторы Java 8 могут не выделять тот факт, что они являются замыканиями, я не знаю.
@Claudiu Я думаю, что ссылка на конкретную языковую реализацию (Python) может усложнить ответ. Вопрос полностью не зависит от языка (а также не имеет языковых тегов).
Существует много путаницы вокруг лямбд и закрытий, даже в ответах на этот вопрос StackOverflow здесь. Вместо того, чтобы расспрашивать случайных программистов, которые узнали о замыканиях на практике с определенными языками программирования или другими невежественными программистами, отправляйтесь в путь к источнику (где все это началось). А так как лямбды и закрытие происходят из Lambda Исчисление изобретен Алонзо Черч еще в 30 - е годы , прежде чем первые электронные вычислительные машины существовали даже, это источник я говорю.
Лямбда-исчисление является самым простым языком программирования в мире. Единственное, что в нем можно сделать: ►
Итак, мы решили одну из загадок:
лямбда - это анонимная функция из приведенного выше примера λx.x+2 .
В разных языках программирования синтаксис функциональной абстракции (лямбда) может отличаться. Например, в JavaScript это выглядит так:
и вы можете сразу применить его к какому-либо параметру:
или вы можете сохранить эту анонимную функцию (лямбда) в некоторой переменной:
который фактически дает ему имя f , позволяя вам ссылаться на него и вызывать его несколько раз позже, например:
Но вы не должны были назвать это. Вы можете позвонить сразу:
В LISP лямбды сделаны так:
и вы можете вызвать такую лямбду, применив ее немедленно к параметру:
Хорошо, теперь пришло время разгадать другую загадку: что такое закрытие . Чтобы сделать это, давайте поговорим о символах ( переменных ) в лямбда-выражениях.
Как я уже сказал, лямбда-абстракция выполняет привязку символа в его подвыражении, чтобы он стал заменяемым параметром . Такой символ называется связанным . Но что, если в выражении есть другие символы? Например: λx.x/y+2 . В этом выражении символ x связан лямбда-абстракцией, λx. предшествующей ему. Но другой символ y не связан - он свободен . Мы не знаем, что это и откуда это происходит, поэтому мы не знаем, что это значит и какую ценность оно представляет, и поэтому мы не можем оценить это выражение, пока не выясним, что это y значит.
На самом деле, то же самое относится и к двум другим символам, 2 и + . Просто мы настолько знакомы с этими двумя символами, что обычно забываем, что компьютер их не знает, и нам нужно сказать, что они означают, определив их где-то, например, в библиотеке или в самом языке.
Это позволяет нам разделить лямбда-выражения на две категории:
- ЗАКРЫТЫЕ выражения: каждый символ, встречающийся в этих выражениях, ограничен какой-то лямбда-абстракцией. Другими словами, они автономны ; они не требуют какого-либо окружающего контекста для оценки. Их также называют комбинаторами .
- Выражения OPEN: некоторые символы в этих выражениях не являются связанными, то есть некоторые символы, встречающиеся в них, являются свободными и требуют некоторой внешней информации, и поэтому они не могут быть оценены, пока вы не предоставите определения этих символов.
Вы можете ЗАКРЫТЬ открытое лямбда-выражение, предоставив среду , которая определяет все эти свободные символы, связывая их с некоторыми значениями (которые могут быть числами, строками, анонимными функциями, т. Е. Лямбдами, что угодно…).
Например, если у вас есть следующее лямбда-выражение: λx.x/y+2 символ x связан, а символ y свободен, поэтому выражение можно open и не может быть оценено, если вы не скажете, что y означает (и то же самое с + и 2 , которые также свободны). Но предположим, что у вас также есть такая среда :
и это как раз закрытие нашего лямбда-выражения:>
Другими словами, он закрывает открытое лямбда-выражение. Вот откуда и произошло закрытие имени, и поэтому ответы многих людей в этой теме не совсем верны: P
Так почему они ошибаются? Почему многие из них говорят, что замыкания - это некоторые структуры данных в памяти или некоторые особенности языков, которые они используют, или почему они путают замыкания с лямбдами? :П
И это еще хуже из-за того факта, что в их словах всегда есть доля правды, которая не позволяет вам легко отклонить это как ложное: P Позвольте мне объяснить:
Людям не потребовалось слишком много времени, чтобы начать называть фактическую структуру данных, которую они используют в реализациях своего языка, чтобы реализовать замыкание как само замыкание. Структура обычно выглядит примерно так:
и эти структуры данных передаются в качестве параметров другим функциям, возвращаются из функций и сохраняются в переменных для представления лямбда-выражений и предоставления им доступа к окружающей их среде, а также к машинному коду для выполнения в этом контексте. Но это просто способ (один из многих) реализовать замыкание, а не само замыкание.
Как я объяснил выше, закрытие лямбда-выражения - это подмножество определений в его среде, которые присваивают значения свободным переменным, содержащимся в этом лямбда-выражении, эффективно закрывая выражение (превращая открытое лямбда-выражение, которое еще не может быть оценено, в закрытая лямбда - выражение, которое затем может быть оценено, так как все символы , содержащиеся в нем теперь определены).
Я надеюсь, что это отвечает на ваши вопросы. Но если у вас есть дополнительные вопросы, не стесняйтесь задавать их в комментариях, и я постараюсь объяснить их лучше.
Пример. Демонстрируется код лямбда-выражений, которые возвращают максимальные и минимальные значения между двумя входными объектами.
Результат выполнения программы
2. Применение лямбда-выражений к последовательностям. Функция map() . Примеры
Если внутри лямбда-выражения нужно циклически обработать последовательность (список, кортеж), то для этого целесообразно использовать функцию map()
- func — функция, которая должна быть применена к каждому элементу последовательности iterables ;
- iterables – итерированный объект, являющийся последовательностью (например, список).
Функция возвращает список, содержащий результаты всех вызовов функции func() .
Пример 1. Использовать функцию map() для получения нового списка, в котором каждый элемент удваивается. Продемонстрировать работу функции для двух случаев:
- без использования лямбда-выражения;
- с использованием лямбда-выражения.
Результат выполнения программы
3. Выборка данных в последовательности. Функция filter() . Примеры
Для выборки данных из последовательности используется функция filter() . Общая форма функции
- func – имя функции, которая применяется к объекту iterable ;
- iterable – итерированный объект (список, кортеж).
Функция возвращает отфильтрованный объект.
Пример 1. Для заданного кортежа строк формируется новый кортеж, который содержит строки длиной 3 символа.
Результат выполнения программы
Пример 2. Для заданного списка чисел формируются числа из диапазона [10; 20]. Продемонстрирована работа функции filter() для функции и лямбда-выражения.
- func – функция или лямбда-выражение, задающие формулу вычисления двух соседних элементов;
- sequence – обрабатываемая последовательность.
Функция reduce() возвращает объект, который есть результатом обработки.
Пример. В примере демонстрируется применение функции reduce() для вычисления суммы элементов последовательности. Для получения формулы вычисления, применяется лямда-выражение и дополнительная функция.
Читайте также: