Элементы функционального программирования в Python
Материал из Xgu.ru
Содержание |
[править] Интересные возможности и инструменты языка
- itertools
- functools
- generators
- continuations
[править] Вопросы и ответы
[править] Как сделать карриинг функции?
class curry: def __init__(self, fun, *args, **kwargs): self.fun = fun self.pending = args[:] self.kwargs = kwargs.copy() def __call__(self, *args, **kwargs): if kwargs and self.kwargs: kw = self.kwargs.copy() kw.update(kwargs) else: kw = kwargs or self.kwargs return self.fun(*(self.pending + args), **kw) Connect = curry(ODBC.Connect, dsn='MyDataSet')
Подробнее: [1].
[править] Можно ли делать замыкания (closures) в Python?
Без проблем, но есть некоторые ньюансы[1].
[править] Есть ли ленивые вычисления в Питоне?
В принципе, это не совсем ленивые вычисления, но нечто подобное можно сделать используя итераторы и yield. Хороший набор функций для работы с итераторами есть в модуле iterools.
Пример ленивого вычисления чисел Фибонначи:
$ cat fib.py from itertools import chain, islice, izip, starmap, imap def fib(): for i in chain([1,1], starmap(lambda x,y: x+y, izip(fib(), islice(fib(), 1, None)))): yield i print list(islice(fib(), 0, 10)) $ python fib.py [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
Конечно, это далеко не то же самое, что
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
в Хаскеле, но визуально выглядит похоже.
[править] Что такое декоратор?
Декоратор -- это вещь.
- Decorators I: Introduction to Python Decorators (англ.)
- PEP-0318: Decorators for Functions and Methods (англ.)
- Function Decorator (англ.) -- small introduction into the topic
- Charming Python: Decorators make magic easy (англ.)
- PythonDecorators (англ.)
- PythonDecoratorLibrary (англ.)
- A brief Python decorator primer (англ.)
- Python 2.4 Decorators (англ.)
Ещё несколько ссылок, с которых я бы даже советовал начать:
- How can I make a chain of function decorators in Python?
- Python Decorators (англ.) — очень простое и понятное объяснение
Полезные модули:
- pypi decorator (англ.)
- functools.wraps (англ.) — функция functools.wrap, которая помогает создавать декораторы
[править] Дополнительная информация
[править] Элементы функционального программирования
- Functional Programming HOWTO (англ.) — введение в функциональное программирование на Python. Рассказывает о том, что такое итераторы, генераторы, generator expressions, list comprehensions и тому подобное
- MapReduce at Outgoing blog (англ.)
- MapReduce: Simplified Data Processing on Large Clusters (англ.)
[править] Примечания
Информация о Python на xgu.ru | ||
---|---|---|
Реализации | Cython • Psyco • PyPy | |
Веб-фреймворки | Django • Flask • Zope | |
IDE | Pydev • NetBeans | |
Курсы | Python для сетевых инженеров | |
Другое | aalib • ctypes • gevent • mpmath • pjsua • Pandas • pyparsing • virtualenv • GMPY • IPython • Jinja2 • Python и Vim • Работа с модулями в Python • SWIG • Scapy • SciPy • Работа с датой и временем в Python • Python как shell • Web и Python • Алгоритмы, сложные структуры данных и дискретная математика в Python • Анализ кода Python • Интеграция Python с другими языками • Объекты и классы в Python • Оформление кода Python • Параллелизм и конкурентное исполнение в Python • Профайлинг в Python • Работа с базами данных в Python • Работа с операционной системой в Python • Работа с сетью в Python • Работа с текстами в Python • Работа с файлами в Python • Сравнение Python с другими языками • Тестирование в Python • Типы в Python • Элементы функционального программирования в Python • Элементы языка Python |