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

目录
相关文章
|
4天前
|
安全 Linux 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
24 2
|
4天前
|
Python
Datetime模块应用:Python计算上周周几对应的日期
Datetime模块应用:Python计算上周周几对应的日期
23 1
|
4天前
|
Python Windows 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
22 1
|
2天前
|
JSON Java Linux
python有用的模块
python有用的模块
|
4天前
|
安全 测试技术 数据库
Python编程--sys模块及OS模块简单用例
Python编程--sys模块及OS模块简单用例
10 1
|
4天前
|
JSON 数据格式 Python
Python编程:利用JSON模块编程验证用户
Python编程:利用JSON模块编程验证用户
12 1
|
5天前
|
网络安全 开发工具 iOS开发
macOS 系统安装Python-nmap模块
macOS 系统安装Python-nmap模块
16 2
|
3天前
|
人工智能 Python
超级好用的Python模块——glob模块
超级好用的Python模块——glob模块
|
4天前
|
存储 编解码 iOS开发
Python模块操作:time—Clock Time(一)
Python模块操作:time—Clock Time(一)
13 0
|
4天前
|
存储 iOS开发 MacOS
Python模块操作:time—Clock Time(二)
Python模块操作:time—Clock Time(二)
14 0