users = [
{'name': 'Alice', 'age': 25, 'email': 'alice@example.com'},
{'name': 'Bob', 'age': 35, 'email': 'bob@example.com'},
{'name': 'Charlie', 'age': 28, 'email': 'charlie@example.com'},
{'name': 'David', 'age': 40, 'email': 'david@example.com'}
]
def filter_and_extract(users):
def is_over_30(user):
return user['age'] > 30
def extract_name_email(user):
return {'name': user['name'], 'email': user['email']}
filtered_users = filter(is_over_30, users)
result = list(map(extract_name_email, filtered_users))
return result
result = filter_and_extract(users)
print(result)
- 首先定义了
is_over_30
函数,这是一个纯函数,用于判断用户年龄是否大于30岁。
- 接着定义了
extract_name_email
函数,也是纯函数,用于从用户字典中提取姓名和邮箱。
- 使用
filter
函数结合is_over_30
函数筛选出年龄大于30岁的用户。
- 使用
map
函数结合extract_name_email
函数对筛选后的用户提取姓名和邮箱,并将结果转换为列表。
- 整个过程遵循函数式编程中不可变数据(原始
users
列表未被修改)和纯函数的特性。