Элементы функционального программирования в 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 | |