Python函数式编程掌握lambda、map和filter的高效用法
```python
# Lambda函数:匿名函数的艺术
square = lambda x: x2
result = square(5) # 返回25
# 立即执行的lambda
(lambda x: x2)(3) # 返回6
# Map函数:批量转换的利器
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x2, numbers)) # [1, 4, 9, 16, 25]
# 多序列映射
list1 = [1, 2, 3]
list2 = [4, 5, 6]
sums = list(map(lambda x, y: x + y, list1, list2)) # [5, 7, 9]
# Filter函数:智能筛选专家
numbers = range(10)
evens = list(filter(lambda x: x % 2 == 0, numbers)) # [0, 2, 4, 6, 8]
# 复杂条件筛选
words = ['apple', 'banana', 'cherry', 'date']
long_words = list(filter(lambda x: len(x) > 5, words)) # ['banana', 'cherry']
# 组合应用:函数式编程的威力
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 筛选偶数并平方
processed = list(
map(lambda x: x2,
filter(lambda x: x % 2 == 0, data))
) # [4, 16, 36, 64, 100]
# 链式处理:数据清洗管道
mixed_data = ['1', '2', 'three', '4', 'five']
def safe_int_convert(x):
try:
return int(x)
except ValueError:
return None
cleaned = list(
filter(lambda x: x is not None,
map(safe_int_convert, mixed_data))
) # [1, 2, 4]
# 字典处理:优雅的键值转换
student_scores = {'Alice': 85, 'Bob': 92, 'Charlie': 78}
# 成绩提升10%
updated_scores = dict(
map(lambda item: (item[0], item[1] 1.1),
student_scores.items())
)
# 条件筛选字典项
high_scores = dict(
filter(lambda item: item[1] > 80,
student_scores.items())
)
# 嵌套数据结构处理
nested_data = [
{'name': 'Alice', 'grades': [85, 90, 78]},
{'name': 'Bob', 'grades': [92, 88, 95]},
{'name': 'Charlie', 'grades': [78, 82, 80]}
]
# 计算每个学生的平均分
averages = list(
map(lambda student: {
'name': student['name'],
'avg': sum(student['grades']) / len(student['grades'])
}, nested_data)
)
# 性能优化技巧:使用生成器表达式
large_data = range(1000000)
# 低效方式(创建中间列表)
result1 = list(map(lambda x: x2, filter(lambda x: x % 2 == 0, large_data)))
# 高效方式(惰性求值)
result2 = (x2 for x in large_data if x % 2 == 0)
# 类型安全的函数组合
from functools import reduce
from typing import List, Callable
def compose(functions: Callable) -> Callable:
return reduce(lambda f, g: lambda x: f(g(x)), functions)
# 创建处理管道
process_pipeline = compose(
lambda x: x 2, # 加倍
lambda x: x + 10, # 加10
lambda x: x 0.5 # 开方
)
result = process_pipeline(16) # ((16^0.5)+10)2 = 28.0
# 实际应用:数据验证和转换
def validate_and_transform(data: List[str]) -> List[int]:
验证字符串列表并转换为整数
return list(
map(int,
filter(lambda x: x.isdigit(), data))
)
# 错误处理增强版
def safe_map(func, iterable, default=None):
带错误处理的map函数
def safe_func(x):
try:
return func(x)
except Exception:
return default
return map(safe_func, iterable)
# 使用示例
problematic_data = ['1', '2', 'abc', '4']
safe_numbers = list(safe_map(int, problematic_data, default=0)) # [1, 2, 0, 4]
```
更多推荐
所有评论(0)