Мимик Хаскелл с Python - PullRequest
       5

Мимик Хаскелл с Python

2 голосов
/ 12 марта 2010

Haskell предоставляет такую ​​функцию, как f = f1. f2

Как я могу имитировать это с Python?

Например, если мне нужно выполнить операцию 'map' два раза, есть ли способ сделать что-то вроде map. карта в Python?

x = ['1','2','3'] 
x = map(int,x) 
x = map(lambda i:i+1, x) 

Ответы [ 5 ]

2 голосов
/ 12 марта 2010

Я думаю, вы ищете композицию функций в Python.

Вы можете сделать это:

f = lambda x: f1(f2(x))
1 голос
/ 12 марта 2010
>>> import <a href="http://oakwinter.com/code/functional/" rel="nofollow noreferrer">functional</a>, <a href="http://docs.python.org/library/functools.html" rel="nofollow noreferrer">functools</a>, <a href="http://docs.python.org/library/operator.html" rel="nofollow noreferrer">operator</a>
>>> f1 = int
>>> f2 = functools.partial(operator.add, 1)
>>> f = functional.compose(f1, f2)
>>> x = map(f, ['1', '2', '3'])
1 голос
/ 12 марта 2010
def compose(f,g):
  return lambda x: f(g(x))

def inc(x): return x+1

map(compose(inc, int), ['1', '2', '3'])
# [2, 3, 4]
1 голос
/ 12 марта 2010

Было несколько предложений по операции compose, но ни одно из них не было оформлено. В то же время можно использовать понимание списка или выражение-генератор для применения сложных преобразований к последовательности.

0 голосов
/ 12 марта 2010

Есть хороший рецепт для этого здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...