Python/Функциональное программирование на Python: различия между версиями

Содержимое удалено Содержимое добавлено
К переименованию
смена формата даты / с помощью AWB
Строка 1:
{{К переименованию|5 августа 2011-08-05|Функциональное программирование на Python}}
[[Функциональное программирование]] является одной из парадигм, поддерживаемых языком программирования [[Python]]. Основными предпосылками для полноценного функционального программирования в Python являются: [[Функция высшего порядка|функции высших порядков]], развитые средства [[Обработка списков|обработки списков]], [[Рекурсия#Рекурсия в программировании|рекурсия]], возможность организации [[Ленивые вычисления|ленивых вычислений]]. Элементы функционального программирования в Питоне могут быть полезны любому программисту, так как позволяют гармонично сочетать выразительную мощность этого подхода с другими подходами.
 
== Возможности ==
 
 
=== Определение и использование функции ===
 
Строка 24 ⟶ 22 :
</source>
 
В начале идут [[Позиционные аргументы|позиционные аргументы]]. Они сопоставляются с именами формальных аргументов по порядку. Затем следуют [[Именованные аргументы|именованные аргументы]]. Они сопоставляются по именам и могут быть заданы в вызове функции в любом порядке. Разумеется, все аргументы без значений по умолчанию должны быть заданы. Повторы в именах аргументов недопустимы.
 
Функция всегда возвращает только одно значение (или <code>None</code>, если значение не задано в операторе <code>return</code> или этот оператор не встречен по достижении конца определения функции). Однако, это незначительное ограничение, так как возвращаемым значением может быть [[кортеж]].
Строка 165 ⟶ 163 :
Другие средства функционального программирования доступны из стандартной библиотеки (например, модуль <code>itertools</code>) и других библиотек.
 
Следующий пример иллюстрирует применение перечисляющего и сортирующего [[Итератор|итераторовитератор]]ов (итератор не может быть напечатан оператором <code>print</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 можно генерировать на выходе, например, код на языке программирования
[[Си_Си (язык_программированияязык программирования)|C]], других языках программирования или [[XML]]-файлы.
 
Несмотря на накладные расходы, ленивое вычисление может дать заметный выигрыш в скорости в случаях, когда действия, оборачиваемые ленивым функтором, достаточно дороги — например, включают объёмные вычисления или доступ к диску. Предположим некоторый промежуточный результат ''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