1、简介
typing 模块为 Python带来了类型提示和类型检查的能力。它允许开发者在代码中添加类型注解,提高代码的可读性和可维护性。尽管Python 是一种动态类型语言,但类型注解能让开发者更清晰地了解函数和变量的预期类型。
2、基本类型注解
2.1 类型别名
typing 模块中有多种内置的类型别名,比如 List、Tuple、Dict 等,可以用于注解变量和函数的预期类型。
from typing import List
def process_numbers(numbers: List[int]) -> int:
return sum(numbers)
2.2 Union 类型
Union 允许参数接受多种不同类型的数据
from typing import Union
def double_or_square(number: Union[int, float]) -> Union[int, float]:
if isinstance(number, int):
return number * 2
else:
return number ** 2
2.3 Optional 类型
Optional 表示参数可以是指定类型或者 None
from typing import Optional
def greet(name: Optional[str]) -> str:
if name:
return f"Hello, {name}!"
else:
return "Hello, World!"
3、类型变量和泛型
3.1 类型变量
TypeVar 允许创建泛型函数和类
from typing import TypeVar, List
T = TypeVar('T')
def get_first_element(items: List[T]) -> T:
return items[0]
first_element = get_first_element([1, 2, 3]) # 推导类型为 int
3.2 泛型函数
Callable 和 Sequence 等泛型类型的使用。
from typing import Callable, Sequence
def apply_function(
func: Callable[[int, int], int],
numbers: Sequence[int]
) -> List[int]:
return [func(num, num) for num in numbers]
4、类型注解的应用
4.1 函数参数和返回值的注解
def add(a: int, b: int) -> int:
return a + b
4.2 类型注解的类成员
class MyClass:
value: int
def __init__(self, initial_value: int) -> None:
self.value = initial_value
def double_value(self) -> int:
return self.value * 2
4.3 生成器函数注解
from typing import Generator
def generate_numbers(n: int) -> Generator[int, None, None]:
for i in range(n):
yield i
5、类型检查工具
使用mypy等静态类型检查工具进行类型检查。
mypy your_program.py
6. 注意事项
- 静态类型检查工具辅助,不会影响Python的动态特性,可以选择性地使用类型注解。
- 类型注解应该让代码更易于理解,但不应使代码变得过于复杂。
596

被折叠的 条评论
为什么被折叠?



