Python使用typing模块(从Python 3.5开始)

简介: 【5月更文挑战第10天】Python使用typing模块(从Python 3.5开始)

image.png
从Python 3.5开始,typing模块被引入以支持静态类型注解。这些注解主要用于文档和类型检查,但它们在运行时不会被强制执行(除了少数几个特殊类型,如typing.NewType)。不过,有一些第三方工具,如mypy,可以利用这些注解来执行静态类型检查。

以下是一些typing模块中常用的类型注解的示例:

  1. 基本类型
from typing import List, Dict, Tuple, Set

def greet(name: str) -> str:
    return f"Hello, {name}!"

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

def get_user_data(user_id: int) -> Tuple[str, int]:
    # 假设这是从某个地方获取的用户数据
    return "John Doe", 30

def count_items(items: Dict[str, int]) -> int:
    return sum(items.values())

def unique_items(items: Set[str]) -> Set[str]:
    return items  # 假设我们直接返回原始集合
  1. 可选参数和返回值
from typing import Optional

def find_user(user_id: int, cache: Optional[Dict[int, str]] = None) -> Optional[str]:
    if cache and user_id in cache:
        return cache[user_id]
    # 假设这里有一个查找用户的逻辑
    # ...
    return None  # 如果没有找到用户,返回None
  1. 泛型
from typing import TypeVar, Generic, List

T = TypeVar('T')  # 声明一个泛型变量T

class Stack(Generic[T]):
    def __init__(self):
        # 创建一个空列表来模拟栈
        self.items: List[T] = []

    def push(self, item: T) -> None:
        self.items.append(item)

    def pop(self) -> T:
        return self.items.pop()

    def empty(self) -> bool:
        return not bool(self.items)
  1. 类型别名
from typing import NewType

UserId = NewType('UserId', int)

def get_user_by_id(user_id: UserId) -> str:
    # 假设这是一个获取用户名的函数
    # 注意:虽然UserId在运行时是int,但它为代码提供了更多的上下文
    return f"User with ID: {user_id}"
  1. 使用第三方库进行类型检查

安装mypy并执行类型检查:

pip install mypy
mypy your_script.py

注意:虽然类型注解对于提高代码质量和可读性非常有用,但Python仍然是一种动态类型的语言,因此这些注解在运行时不会强制执行。它们主要用于文档和工具(如mypy)中的静态类型检查。

目录
相关文章
|
13小时前
|
Unix Shell Python
Python教程:开箱即用的Python os模块知识
注:文末有福利小工具源码 Python 的 os 模块提供了许多接口用于与操作系统进行交互,包括文件操作、目录操作、路径操作、环境变量操作、系统信息获取等
10 1
|
18小时前
|
存储 程序员 Python
python中模块对象__doc__
【6月更文挑战第12天】
10 5
|
18小时前
|
Python
python中模块对象__name__
【6月更文挑战第12天】
14 7
|
20小时前
|
数据可视化 定位技术 API
Python pyecharts 模块
Python pyecharts 模块
|
20小时前
|
存储 算法 安全
Python hashlib 模块
Python hashlib 模块
|
1天前
|
Python
Python statistics 模块
Python statistics 模块
|
4天前
|
自然语言处理 Python
Python零基础入门-6 模块和包
Python零基础入门-6 模块和包
|
4天前
|
Python
Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)-2
Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)
|
4天前
|
数据可视化 开发者 Python
Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)-1
Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)
|
4天前
|
存储 API C语言
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-2
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)