当前位置: 首页 > article >正文

Python类型注解必备利器:typing模块解读指南

更多资料获取

📚 个人网站:ipengtao.com


在Python 3.5版本后引入的typing模块为Python的静态类型注解提供了支持。这个模块在增强代码可读性和维护性方面提供了帮助。本文将深入探讨typing模块,介绍其基本概念、常用类型注解以及使用示例,以帮助读者更全面地了解和应用静态类型注解。

1. 简介

typing模块为Python带来了类型提示和类型检查的能力。它允许开发者在代码中添加类型注解,提高代码的可读性和可维护性。尽管Python是一种动态类型语言,但类型注解能让开发者更清晰地了解函数和变量的预期类型。

2. 基本类型注解

a. 类型别名

typing模块中有多种内置的类型别名,比如ListTupleDict等,可以用于注解变量和函数的预期类型。

from typing import List

def process_numbers(numbers: List[int]) -> int:
    return sum(numbers)

b. 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

c. Optional 类型

Optional表示参数可以是指定类型或者None

from typing import Optional

def greet(name: Optional[str]) -> str:
    if name:
        return f"Hello, {name}!"
    else:
        return "Hello, World!"

3. 类型变量和泛型

a. 类型变量

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

b. 泛型函数

CallableSequence等泛型类型的使用。

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. 类型注解的应用

a. 函数参数和返回值的注解

def add(a: int, b: int) -> int:
    return a + b

b. 类型注解的类成员

class MyClass:
    value: int

    def __init__(self, initial_value: int) -> None:
        self.value = initial_value

    def double_value(self) -> int:
        return self.value * 2

c. 生成器函数的注解

from typing import Generator

def generate_numbers(n: int) -> Generator[int, None, None]:
    for i in range(n):
        yield i

5. 高级类型注解

a. 递归类型注解

ListDict等类型的嵌套和组合。

from typing import List, Dict, Union

Tree = List[Union[int, Dict[str, 'Tree']]]

b. 类型别名

自定义类型别名提高代码可读性。

UserId = int
Username = str

def get_user_details(user_id: UserId) -> Tuple[UserId, Username]:
    # some code

6. 类型检查工具

使用mypy等静态类型检查工具进行类型检查。

$ mypy your_program.py

7. 注意事项

  • 静态类型检查工具辅助,不会影响Python的动态特性,可以选择性地使用类型注解。
  • 类型注解应该让代码更易于理解,但不应使代码变得过于复杂。

总结

typing模块为Python添加了静态类型注解的能力,提高了代码的可读性和维护性。本文介绍了类型注解的基本概念、常见类型和高级类型,以及类型检查工具的使用。希望读者可以更好地应用类型注解,改善Python代码的质量。


Python学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。


http://www.kler.cn/a/157244.html

相关文章:

  • 全面掌握 AutoGluon:从入门到生产环境的实践指南
  • 14:30面试,14:08就出来了,面试问的有点变态呀。。。
  • lxml提取某个外层标签里的所有文本
  • 【时间之外】IT人求职和创业应知【74】-运维机器人
  • Dubbo简单总结
  • Rasa框架的优点和缺点
  • MC:aternos使用报告(一)
  • nginx部署多个vue或react项目
  • 回溯法及例题(C++实现)
  • 大三上oracle数据库期末复习
  • dp-拦截导弹2
  • 计算机辅助药物设计AIDD-小分子-蛋白质|分子生成|蛋白质配体相互作用预测
  • RWA+AI 叙事下的 ProsperEx,对 Web3 时代交易的重新定义
  • JAVA泛型概念的理解
  • 电压驻波比
  • Oracle 11g安装过程
  • 初识动态规划算法(题目加解析)
  • SSM校园组团平台系统开发mysql数据库web结构java编程计算机网页源码eclipse项目
  • 【0241】Parser解析分析统计信息(PARSE ANALYSIS STATISTICS)
  • C语言面试之旅:掌握基础,探索深度(面试实战之ARM架构一)
  • Boost:内存映射文件
  • C++ 指针详解
  • mysql which is not in SELECT list; this is incompatible with DISTINCT解决方案
  • Module build failed: Error: ENOENT: no such file or directory
  • 现在的00后,实在是太卷了......
  • springboot遇到的问题02