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)中的静态类型检查。

目录
相关文章
|
9天前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
12天前
|
数据采集 Web App开发 JavaScript
python-selenium模块详解!!!
Selenium 是一个强大的自动化测试工具,支持 Python 调用浏览器进行网页抓取。本文介绍了 Selenium 的安装、基本使用、元素定位、高级操作等内容。主要内容包括:发送请求、加载网页、元素定位、处理 Cookie、无头浏览器设置、页面等待、窗口和 iframe 切换等。通过示例代码帮助读者快速掌握 Selenium 的核心功能。
54 5
|
13天前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy教程之SciPy模块列表13:单位类型。常量模块包含多种单位,如公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了如何使用`constants`模块获取零摄氏度对应的开尔文值(273.15)和华氏度与摄氏度的转换系数(0.5556)。
15 1
|
14天前
|
XML 前端开发 数据格式
超级详细的python中bs4模块详解
Beautiful Soup 是一个用于从网页中抓取数据的 Python 库,提供了简单易用的函数来处理导航、搜索和修改分析树。支持多种解析器,如 Python 标准库中的 HTML 解析器和更强大的 lxml 解析器。通过简单的代码即可实现复杂的数据抓取任务。本文介绍了 Beautiful Soup 的安装、基本使用、对象类型、文档树遍历和搜索方法,以及 CSS 选择器的使用。
34 1
|
15天前
|
Python
SciPy 教程 之 SciPy 模块列表 9
SciPy教程之常量模块介绍,涵盖多种单位类型,如公制、质量、角度、时间、长度、压强等。示例展示了如何使用`scipy.constants`模块查询不同压强单位对应的帕斯卡值,包括atm、bar、torr、mmHg和psi。
12 1
|
11天前
|
Python
SciPy 教程 之 SciPy 模块列表 16
SciPy教程之SciPy模块列表16 - 单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了力学单位的使用,如牛顿、磅力和千克力等。
13 0
|
12天前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy 教程之 SciPy 模块列表 15 - 功率单位。常量模块包含多种单位,如公制、质量、时间等。功率单位中,1 瓦特定义为 1 焦耳/秒,表示每秒转换或耗散的能量速率。示例代码展示了如何使用 `constants` 模块获取马力值(745.6998715822701)。
13 0
|
12天前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy教程之SciPy模块列表15:单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。功率单位以瓦特(W)表示,1W=1J/s。示例代码展示了如何使用`constants`模块获取马力(hp)的值,结果为745.6998715822701。
15 0
|
13天前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy 教程之 SciPy 模块列表 13 - 单位类型。常量模块包含多种单位:公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例:`constants.zero_Celsius` 返回 273.15 开尔文,`constants.degree_Fahrenheit` 返回 0.5555555555555556。
12 0
|
14天前
|
Python
SciPy 教程 之 SciPy 模块列表 11
SciPy教程之SciPy模块列表11:单位类型。常量模块包含公制单位、质量单位、角度换算、时间单位、长度单位、压强单位、体积单位、速度单位、温度单位、能量单位、功率单位、力学单位等。体积单位示例展示了不同体积单位的换算,如升、加仑、流体盎司、桶等。
13 0
下一篇
无影云桌面