我正在学习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
功能。这可能吗?
答案 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
而不是编写自己的函数。