实际的 Lambda 示例
现实世界中的 Lambda 类型注释场景
数据转换
from typing import List, Callable
def transform_data(
data: List[int],
transformer: Callable[[int], float]
) -> List[float]:
return list(map(transformer, data))
## 带有数据缩放类型提示的 Lambda
scale_data = lambda x: int -> float: x * 1.5
numbers = [1, 2, 3, 4, 5]
scaled_numbers = transform_data(numbers, scale_data)
过滤与验证
from typing import List, Callable, Optional
def filter_data(
items: List[int],
condition: Callable[[int], bool]
) -> List[int]:
return list(filter(condition, items))
## 用于偶数过滤的 Lambda
is_even = lambda x: int -> bool: x % 2 == 0
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = filter_data(numbers, is_even)
使用自定义比较器进行排序
from typing import List, Tuple, Callable
def custom_sort(
data: List[Tuple[str, int]],
key_func: Callable[[Tuple[str, int]], int]
) -> List[Tuple[str, int]]:
return sorted(data, key=key_func)
## 按第二个元素排序的 Lambda
sort_by_age = lambda x: Tuple[str, int] -> int: x[1]
people = [('Alice', 30), ('Bob', 25), ('Charlie', 35)]
sorted_people = custom_sort(people, sort_by_age)
Lambda 类型注释模式
模式 |
用例 |
示例 |
简单转换 |
数据转换 |
lambda x: int -> float |
过滤 |
条件检查 |
lambda x: int -> bool |
排序键 |
自定义比较 |
lambda x: Tuple[str, int] -> int |
验证 |
输入验证 |
lambda x: str -> bool |
带类型提示的错误处理
from typing import Optional, Callable
def safe_divide(
a: float,
b: float,
error_handler: Optional[Callable[[Exception], float]] = None
) -> float:
try:
return a / b
except ZeroDivisionError as e:
if error_handler:
return error_handler(e)
raise
## Lambda 错误处理程序
default_error = lambda e: Exception -> float: 0.0
result = safe_divide(10, 0, default_error)
Lambda 组合
from typing import Callable, TypeVar
T = TypeVar('T')
U = TypeVar('U')
V = TypeVar('V')
def compose(
f: Callable[[U], V],
g: Callable[[T], U]
) -> Callable[[T], V]:
return lambda x: T -> V: f(g(x))
## 函数组合示例
double = lambda x: int -> int: x * 2
increment = lambda x: int -> int: x + 1
double_then_increment = compose(increment, double)
Lambda 类型检查流程
graph TD
A[Lambda 定义] --> B[类型注释]
B --> C{类型检查器}
C --> |验证类型| D[编译时检查]
D --> E[运行时执行]
C --> |类型不匹配| F[引发类型错误]
Lambda 类型注释的最佳实践
- 保持 Lambda 简单且专注
- 使用清晰准确的类型提示
- 对于复杂逻辑,优先使用具名函数
- 利用像 mypy 这样的类型检查器
通过应用这些实际示例,开发人员可以在他们的 LabEx Python 项目中有效地将类型提示与 Lambda 函数结合使用,从而提高代码质量和可读性。