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

目录
相关文章
|
3天前
|
传感器 JSON 监控
python中psutil模块的使用详解(python3经典编程案例)
这篇文章介绍了如何使用Python的`pyinstaller`库打包应用程序,并提供了详细的打包步骤和参数说明。
22 7
|
2天前
|
前端开发 Python
python之【Tkinter模块】
python之【Tkinter模块】
12 5
|
2天前
|
Python
|
3天前
|
安全 Python 容器
Python中好用的模块-collections
文章介绍了Python中collections模块的几个实用组件,包括Counter、defaultdict、OrderedDict、namedtuple、deque和ChainMap的功能与使用方法。
16 2
|
3天前
|
关系型数据库 MySQL Python
pymysql模块,python与MySQL之间的交互
pymysql模块,python与MySQL之间的交互
|
3天前
|
Unix Linux 网络安全
python中连接linux好用的模块paramiko(附带案例)
该文章详细介绍了如何使用Python的Paramiko模块来连接Linux服务器,包括安装配置及通过密码或密钥进行身份验证的示例。
9 1
|
3天前
|
API 语音技术 开发者
用python实现文字转语音的5个较好用的模块
这篇文章介绍了五个Python模块:gtts、pyttsx3、baidu-aip、pywin32和speech,它们能够实现文本到语音的转换功能。
10 1
|
1天前
|
Python
7-14|salt之安装Python模块
7-14|salt之安装Python模块
|
3天前
|
数据可视化 搜索推荐 JavaScript
pyecharts模块的几个经典案例(python经典编程案例)
文章提供了多个使用pyecharts模块创建数据可视化的Python编程案例,展示如何生成各种类型的图表并进行定制化设置。
9 0
|
3天前
|
数据挖掘 Python
用python的tushare模块分析股票案例(python3经典编程案例)
该文章提供了使用Python的tushare模块分析股票数据的案例,展示了如何获取股票数据以及进行基本的数据分析。
11 0