2016-04-27 9 views
0

私はPythonでFunctional Programmingを学んでいます。私は、関数は、理想的には一つのことを行うことを読んで、私は大きな計算を行うだろうどのように私はかつてFunctional Programmingのパラダイムで2つの関数をマップする

import datetime 

birthdays = [ 
    datetime.datetime(2012, 4, 29), 
    datetime.datetime(2006, 8, 9), 
    datetime.datetime(1978, 5, 16), 
    datetime.datetime(1981, 8, 15), 
    datetime.datetime(2001, 7, 4), 
    datetime.datetime(1999, 12, 30) 
] 

today = datetime.datetime.today() 

def is_over_13(dt): 
    delta = today - dt 
    return delta.days >= 4745 

def date_string(dt): 
    return dt.strftime("%B %d") 

def reverse(iterable): 
    return iterable[::-1] 

birth_dates = list(map(date_string, filter(is_over_13, birthdays))) 

で多くの機能を渡すことができない場合13. Iかけている人々によってフィルタリングdate_string内のコードを表示し誕生日既存のmapの上にreverse機能を追加します。それは可能ですか?

答えて

1

はいあなたは(私はあなたのreverse機能を使用しています)ことができます。

birth_dates = reverse(list(map(date_string, filter(is_over_13, birthdays)))) 

それとも、あなただけの最初にbirthdaysを逆転できる:

birth_dates = list(map(date_string, filter(is_over_13, reverse(birthdays)))) 

ます。またreversedの代わりに使用することができますあなた自身の関数を書く。

2

使用できるreversed()機能が内蔵されています。イテレータを返しますので、list()でラップしたい場合があります。

birth_dates = list(reversed(map(date_string, filter(is_over_13, birthdays)))) 
関連する問題