python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python类型注解

Python类型注解举例超详细指南

作者:cugleem

类型注解(Type Annotations)是 Python 的一种语法,用于在代码中标注变量、函数参数和返回值的类型,下面这篇文章主要介绍了Python类型注解的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

Python 类型注解详细指南

类型注解(Type Annotations)是 Python 3.5+ 引入的一项重要特性,它允许开发者显式地声明变量、函数参数和返回值的类型。

1.基础类型注解

Python 内置的基本类型可以直接用于注解:

# 变量注解
name: str = "Alice"
age: int = 30
price: float = 19.99
is_active: bool = True

# 函数参数和返回值注解
def greet(name: str) -> str:
    return f"Hello, {name}"

2.复合类型注解

对于更复杂的类型,可以使用 typing 模块中的工具:

from typing import List, Dict, Tuple, Set, Optional

# 列表
numbers: List[int] = [1, 2, 3]

# 字典
person: Dict[str, str] = {"name": "Alice", "email": "alice@example.com"}

# 元组 (固定长度和类型)
point: Tuple[float, float] = (3.14, 2.71)

# 集合
unique_numbers: Set[int] = {1, 2, 3}

# 可选类型 (表示可能是None)
middle_name: Optional[str] = None

3.函数类型注解

函数可以详细注解参数和返回值类型:

from typing import Callable

# 基本函数注解
def add(a: int, b: int) -> int:
    return a + b

# 带默认值的参数
def greet(name: str, greeting: str = "Hello") -> str:
    return f"{greeting}, {name}"

# 函数作为参数
def apply_func(func: Callable[[int, int], int], x: int, y: int) -> int:
    return func(x, y)

4.特殊类型

typing 模块提供了许多特殊类型:

from typing import Any, Union, NoReturn

# Any - 任意类型
def log(message: Any) -> None:
    print(message)

# Union - 多个可能的类型
def square(number: Union[int, float]) -> Union[int, float]:
    return number ** 2

# NoReturn - 函数不会正常返回
def fail() -> NoReturn:
    raise Exception("Something went wrong")

5.类型别名

可以为复杂类型创建别名提高可读性:

from typing import List, Tuple

# 简单别名
UserId = int

# 复杂别名
Point = Tuple[float, float]
Vector = List[float]

def normalize(vector: Vector) -> Vector:
    length = sum(x**2 for x in vector) ** 0.5
    return [x/length for x in vector]

6.泛型

使用泛型创建可重用的类型模板:

from typing import TypeVar, Generic, List

T = TypeVar('T')  # 声明类型变量

class Stack(Generic[T]):
    def __init__(self) -> None:
        self.items: List[T] = []
    
    def push(self, item: T) -> None:
        self.items.append(item)
    
    def pop(self) -> T:
        return self.items.pop()

# 使用
int_stack = Stack[int]()
int_stack.push(1)

7.类型变量

类型变量允许约束可能的类型:

from typing import TypeVar, Union

# 无约束的类型变量
T = TypeVar('T')

# 约束的类型变量
Number = TypeVar('Number', int, float, complex)

def double(x: Number) -> Number:
    return x * 2

8.自定义类型

可以创建自定义类型:

from typing import NewType, TypedDict

# 新类型
UserId = NewType('UserId', int)

def get_user_name(user_id: UserId) -> str:
    return f"user_{user_id}"

# 类型化字典 (Python 3.8+)
class Person(TypedDict):
    name: str
    age: int
    email: Optional[str]

person: Person = {"name": "Alice", "age": 30}

9.类型检查工具

常用的类型检查工具:

安装 mypy:

pip install mypy

运行类型检查:

mypy your_script.py

10.注意事项

总结

在Python中使用类型注解(Type Annotations)虽然看起来与Python的动态类型特性相悖,但实际上这是Python社区近年来积极推广的实践,具有重要的实际意义。Python 的类型注解系统提供了强大的工具来增强代码的可读性和可维护性,同时通过静态类型检查可以在开发早期发现潜在的错误。随着 Python 类型系统的不断演进,类型注解正成为大型 Python 项目的标准实践,具有以下优势:

(1)代码可读性与文档化

(2)静态类型检查

(3)IDE智能支持

(4)项目可维护性

类型注解在Python中是一种可选的增强工具,它通过静态类型检查提升了代码的可靠性和可维护性,同时保留了动态类型的运行时灵活性。尽管不是强制性的,但在现代Python开发中(尤其是大型项目)已成为强烈推荐的实践。它的必要性取决于项目规模、团队习惯和维护周期,合理使用能显著降低长期维护成本。

到此这篇关于Python类型注解的文章就介绍到这了,更多相关Python类型注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文