在函数式编程范例中将两个函数映射在一起

时间:2016-04-27 13:08:18

标签: python functional-programming

我正在学习Python中的函数编程。我读到理想的功能是做一件事,所以如果我不能同时传递很多功能,我怎么做大计算?

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)))

代码显示的date_string生日是由超过13岁的人过滤的。我想在现有reverse之上添加map功能。这可能吗?

2 个答案:

答案 0 :(得分:2)

您可以使用内置的reversed()功能。它返回一个迭代器,因此您可能希望用list()包装它。

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

答案 1 :(得分: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而不是编写自己的函数。