Я видел некоторые изящные фрагменты python, использующие понимание списков и уменьшение карты. Можете ли вы поделиться некоторыми из этих кодов или веб-сайта.Фрагменты функционального программирования Python
Спасибо.
Я видел некоторые изящные фрагменты python, использующие понимание списков и уменьшение карты. Можете ли вы поделиться некоторыми из этих кодов или веб-сайта.Фрагменты функционального программирования Python
Спасибо.
Есть некоторые хорошие функциональные фрагменты стиля здесь: Functional Programming HOWTO
Вот быстрая сортировка:
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
Python не lisp. Пожалуйста, не пытайтесь сделать так. Это уменьшает только одну из самых сильных сторон Python, которая является ее читабельностью и понятностью позже.
Если вам нравится функциональное программирование, изучите Haskell, ML, или F#. Вы будете поражены тем, что предлагают эти языки (с самого начала начинаются чистые функции).
Я согласен с ML - часто упускается из виду – zebrabox
Будьте осторожны при программировании python в функциональном стиле. Единственная причина, по которой это делается, - это читаемость. Если алгоритм более элегантно выражен функционально, чем императивно, и он не вызывает проблем с производительностью (обычно это не так), то идите прямо вперед.
Однако python не оптимизирует рекурсию хвоста и имеет фиксированный предел рекурсии 1000, поэтому вы вообще не можете выполнять рекурсию O (n), только O (log (n)).
Кроме того, reduce() удаляется в python 3 по уважительной причине (http://www.artima.com/weblogs/viewpost.jsp?thread=98196). Большинство нетривиальных применений сокращения более читабельны как нормальный цикл вместо сокращения, а sum() уже встроен.
'reduce' все еще находится в' functools'. – max
Хороший вопрос, но ** сообщество wiki **! –