Фрагменты функционального программирования Python - PullRequest
9 голосов
/ 19 января 2010

Я видел несколько элегантных фрагментов Python, использующих списки и уменьшение карт.Можете ли вы поделиться некоторыми из этих кодов или веб-сайта.

Спасибо.

Ответы [ 4 ]

7 голосов
/ 19 января 2010

Питон не лисп. Пожалуйста, не пытайтесь заставить это выглядеть таким образом. Это только уменьшает одну из самых сильных сторон Python, а именно читаемость и понятность в дальнейшем.

Если вам нравится функциональное программирование, изучите Haskell , ML или F # . Вы будете поражены тем, что предлагают эти языки (чистые функции для начала).

5 голосов
/ 19 января 2010

Здесь есть несколько хороших фрагментов функционального стиля: Функциональное программирование HOWTO

3 голосов
/ 19 января 2010

Будьте осторожны при программировании Python в функциональном стиле. Единственная причина когда-либо сделать это для удобочитаемости. Если алгоритм более элегантно выражен функционально, чем императивно, и он не вызывает проблем с производительностью (обычно это не так), тогда продолжайте.

Однако python не оптимизирует хвостовую рекурсию и имеет фиксированный предел рекурсии 1000, поэтому обычно вы не можете выполнить O (n) рекурсию, только O (log (n)).

Кроме того, в Python 3 удалено Reduce () по уважительной причине (http://www.artima.com/weblogs/viewpost.jsp?thread=98196). Большинство нетривиальных способов использования Reduce более читабельны как обычный цикл вместо сокращения, а sum () уже встроен.

2 голосов
/ 19 января 2010

Вот быстрая сортировка:

def qsort (list):
    if (len(list) > 1):
        list = qsort(filter (lambda x: x <= list[0], list[1:])) + [list[0]] + qsort(filter (lambda x: x > list[0],  list[1:]))
    return list

Это решение для программирования головоломки поиска пропущенного числа среди целых чисел от 1 до 100:

from random import randint
nos = range(1,101)
to_remove = randint(1,100)
nos.remove(to_remove)
print "Removed %d from list" % to_remove

found = 5050 - reduce (lambda x,y: x+y, nos)
print "You removed %d " % found
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...