Python/Функциональное программирование на Python: различия между версиями
Содержимое удалено Содержимое добавлено
К переименованию |
смена формата даты / с помощью AWB |
||
Строка 1:
{{К переименованию|
[[Функциональное программирование]] является одной из парадигм, поддерживаемых языком программирования [[Python]]. Основными предпосылками для полноценного функционального программирования в Python являются: [[Функция высшего порядка|функции высших порядков]], развитые средства [[Обработка списков|обработки списков]], [[Рекурсия#Рекурсия в программировании|рекурсия]], возможность организации [[Ленивые вычисления|ленивых вычислений]]. Элементы функционального программирования в Питоне могут быть полезны любому программисту, так как позволяют гармонично сочетать выразительную мощность этого подхода с другими подходами.
== Возможности ==
=== Определение и использование функции ===
Строка 24 ⟶ 22 :
</source>
В начале идут [[
Функция всегда возвращает только одно значение (или <code>None</code>, если значение не задано в операторе <code>return</code> или этот оператор не встречен по достижении конца определения функции). Однако, это незначительное ограничение, так как возвращаемым значением может быть [[кортеж]].
Строка 165 ⟶ 163 :
Другие средства функционального программирования доступны из стандартной библиотеки (например, модуль <code>itertools</code>) и других библиотек.
Следующий пример иллюстрирует применение перечисляющего и сортирующего [[
<source lang="python">
>>> it = enumerate(sorted("PYTHON")) # итератор для перечисленных отсортированных букв слова
Строка 238 ⟶ 236 :
Некоторые примеры из книги рецептов:
* [http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/280501 Ленивая сортировка]
* [http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/498247 Ленивый обход графа]
Строка 317 ⟶ 314 :
При использовании этой техники скорость исполнения не будет отличаться от «статического» кода (если не считать времени, требующегося на однократное конструирование результирующей функции).
Вместо байтокода Python можно генерировать на выходе, например, код на языке программирования
[[
Несмотря на накладные расходы, ленивое вычисление может дать заметный выигрыш в скорости в случаях, когда действия, оборачиваемые ленивым функтором, достаточно дороги — например, включают объёмные вычисления или доступ к диску. Предположим некоторый промежуточный результат ''X'' лениво вычисляется перед условным оператором; для него будет создана цепочка функторов. В той ветке условного оператора, где значение ''X'' не требуется по ходу вычисления, эта цепочка функторов будет просто отброшена, не приведя к дорогостоящему вычислению. В другой ветке, где ''X'' требуется для вычисления конечного результата функции, цепочка функторов произведёт его вычисление. При этом программисту не нужно отслеживать, в какой из веток алгоритма значение может не потребоваться: он может рассчитывать, что дорогостоящее вычисление ''X'' произойдёт только тогда, когда его результат не будет отброшен.
Строка 325 ⟶ 322 :
== Ссылки ==
* [http://linuxgazette.net/109/pramode.html Functional Programming with Python], Pramode C.E., Linux Gazette, 2004
* [http://www-128.ibm.com/developerworks/library/l-prog.html Charming Python: Functional programming in Python], David Mertz
|