【python】typing用法

一、基础类型提示

1. 基本类型注解

# 变量类型注解
age: int = 30
name: str = "Alice"
is_student: bool = False
height: float = 1.75

2. 函数注解

def greet(name: str, age: int) -> str:return f"Hello {name}, you are {age} years old!"

二、组合类型

1. 联合类型(Union)

from typing import Union# value 可以是整数或浮点数
def format_number(value: Union[int, float]) -> str:return f"{value:.2f}"# 或者使用简写 |(Python 3.10+)
def format_number(value: int | float) -> str:return f"{value:.2f}"

2. 可选类型(Optional)

from typing import Optionaldef find_user(id: int) -> Optional[str]:# 返回值可以是字符串或 Nonereturn user_db.get(id, None)

三、容器类型

1. 列表(List)

from typing import List# 整数列表
scores: List[int] = [90, 85, 95]# 混合类型列表(不推荐,尽量避免)
values: List[Union[int, str]] = [1, "two", 3]

2. 元组(Tuple)

from typing import Tuple# 固定结构元组
point: Tuple[float, float] = (3.5, 7.2)# 可变长度元组
points: Tuple[float, ...] = (1.0, 2.5, 3.7)

3. 字典(Dict)

from typing import Dict# 键为字符串,值为整数的字典
student_grades: Dict[str, int] = {"Alice": 90, "Bob": 85}# 复杂字典
person: Dict[str, Union[str, int]] = {"name": "Alice", "age": 30}

四、特殊类型

1. 字面值类型(Literal)

from typing import Literal# 参数只能是特定值
def set_direction(direction: Literal["up", "down", "left", "right"]) -> None:print(f"Moving {direction}")set_direction("up")    # 正确
set_direction("north")  # 类型检查错误
# 注意:Python 的类型注解(包括 Literal)只对类型检查工具有效,不会影响实际运行,所以两个输出都正常。

2. 类型别名(TypeAlias)

# 创建类型别名(Python 3.10+)
from typing import TypeAliasCoordinate: TypeAlias = Tuple[float, float]def distance(a: Coordinate, b: Coordinate) -> float:return ((a[0]-b[0])**2 + (a[1]-b[1])**2)**0.5

五、泛型与高级类型

1. 可调用对象(Callable)

from typing import Callable# 简单函数类型
Adder: Callable[[int, int], int] = lambda x, y: x + ydef add(x: int, y: int) -> int:return x + ydef apply_twice(func: Callable[[int, int], int], x: int, y: int) -> int:return func(func(x, y), func(x, y))print(apply_twice(add, 2, 3)) # Output: 10
def create_adder(n: int) -> Callable[[int, int], int]:def add(x: int, y: int) -> int:return x + y + nreturn addprint(create_adder(5)(2, 3)) # Output: 10

2. Iterable, Sequence, Mapping

from typing import Iterable, Sequence, Mapping# Iterable(可迭代对象)
def sum_all(values: Iterable[int]) -> int:return sum(values)# Sequence(支持索引的集合)
def get_middle(items: Sequence[str]) -> str:return items[len(items)//2]# Mapping(类似字典的结构)
def find_value(data: Mapping[str, int], key: str) -> int:return data.get(key, 0)

六、结构化类型

1. TypedDict(类型化字典)

from typing import TypedDict, Listclass Person(TypedDict):name: strage: inthobbies: List[str]alice: Person = {"name": "Alice","age": 30,"hobbies": ["reading", "hiking"]
}

2. NamedTuple(命名元组)

from typing import NamedTupleclass Point(NamedTuple):x: floaty: floatz: float = 0.0  # 默认值p = Point(1.5, 2.5)
print(p.x, p.y)  # 1.5 2.5

七、动态类型相关

1. Any(任意类型)

from typing import Anydef process_data(data: Any) -> Any:# 此函数接受和返回任何类型的值if isinstance(data, list):return data[0]return data

2. Type(类类型)

from typing import Type, TypeVarT = TypeVar('T')def create_instance(cls: Type[T]) -> T:return cls()class Widget: pass
widget = create_instance(Widget)

十、Python 3.10+ 改进

Python 3.10 引入了更简洁的类型提示语法:

# 联合类型简化
def format_value(value: int | float | str) -> str:return str(value)# 类型别名简化
type Coordinate = tuple[float, float]# 参数化泛型
def first(items: list[T]) -> T:return items[0]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/909728.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/909728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web前端开发核心基础:Html结构分析,head,body,不同标签的作用

前端技术协同关系 协作流程:HTML构建页面框架—>css美化样式(选择器属性)—>JavaScript实现交互(类似于python的脚本语言)扩展基础:在上面三项基础上学习Vue\React、构建工具WePack和浏览器工作原理…

精益数据分析(105/126):移动应用核心指标解析与用户分层营收策略

精益数据分析(105/126):移动应用核心指标解析与用户分层营收策略 在移动应用市场竞争白热化的今天,单纯追求下载量已无法保证商业成功,精细化运营核心指标成为盈利关键。本文将深入解析每日活跃用户平均营收&#xff…

被CC攻击了,对服务器有什么影响?

博客正文: 最近,不少网站管理员和运维人员反映遭遇了CC攻击,导致服务器性能异常甚至瘫痪。那么,CC攻击究竟会对服务器造成哪些影响?本文将为你简要解析CC攻击的原理及其带来的危害,帮助你更好地理解并应对…

Tensorflow安装出现dependency conflict错误

Python版本: 3.11.4 pip版本已升到最新 电脑上有mac的原装Python2.x,我装的3.11.4,还有个什么依赖的3.9 运行 pip3 install tensorflow 出现类似以下错误 (我报错的是另一个不是tensorflow—estimator,但基本就是…

2025年HTTP半开与错误攻击防御指南:原理拆解与实战防护

你以为限流就能防住HTTP攻击?黑客用协议畸形包AI调度正在撕裂传统防线! 一、HTTP半开攻击:慢速绞杀服务器资源 ▶ 攻击原理剖析 HTTP半开攻击(如Slowloris)是一种应用层DoS攻击,通过建立大量半开连接耗尽…

Mybatis(XML映射文件、动态SQL)

目录 基础操作 准备: 删除: 新增: 更新: 查询: 条件查询: XML映射文件 动态SQL if foreach sql&include 基础操作 准备: 准备数据库表 创建一个新的springboot工程&#xff0…

python校园拼团系统

目录 技术栈介绍具体实现截图系统设计研究方法:设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理,难度适中&#xf…

多模态大语言模型arxiv论文略读(127)

When SAM2 Meets Video Camouflaged Object Segmentation: A Comprehensive Evaluation and Adaptation ➡️ 论文标题:When SAM2 Meets Video Camouflaged Object Segmentation: A Comprehensive Evaluation and Adaptation ➡️ 论文作者:Yuli Zhou, …

剑指offer32_二叉搜索树的后序遍历序列

二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 如果是则返回true,否则返回false。 假设输入的数组的任意两个数字都互不相同。 数据范围 数组长度 [ 0 , 1000 ] [0,1000] [0,1000]。 样例 输入&…

《仿盒马》app开发技术分享-- 订单结合优惠券结算(端云一体)

技术栈 Appgallery connect 开发准备 上一节我们已经实现了优惠券的选择,并且成功的把券后的价格也展示给用户,不能使用的优惠券我们也用友好的方式告知用户,这一节我们来实现优惠券内容的下一步,优惠券内容结合订单进行结算提…

Python+Selenium+Pytest+POM自动化测试框架封装

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 1、测试框架简介 1)测试框架的优点 代码复用率高,如果不使用框架的话,代码会显得很冗余。可以组装日志、报告、邮件等一些…

宋代大模型:智能重构下的文明再发现

引言:当汴京城遇见生成式AI 一幅动态的《清明上河图》正通过全息投影技术演绎汴京城的市井百态。这个虚实交融的场景,恰似宋代大模型技术的隐喻——以人工智能为纽带,连接起东京梦华的繁盛图景与数字时代的文明重构。作为人工智能与历史学交…

K-means++:让K-means“聪明”地选择初始中心点

大家好!欢迎来到我的技术分享博客~ 👋 在前两篇博客中,我们深入探讨了经典的 K-means 算法 以及它的优化方案 Canopy K-means。如果你还没有看过,强烈建议先回顾一下,因为今天的主题 K-means 和它们有着千丝万缕的联系…

Langchain学习笔记(1)——如何调用Huggingface的模型并实现实时返回生成结果

Langchain支持很方便的OpenAI模型的调用,可以做到快速开发大模型应用。但是要使用Huggingface上的开源模型就没有那么方便了,本文就详细阐述如何用Langchain开发基于Huggingface上的模型,并实时返回生成结果。 实时返回生成结果是LLM很关键的…

Java安全-常规漏洞问题(SQL注入,XXE,SSRF,RCE)

靶场搭建 靶场下载 : https://github.com/whgojp/JavaSecLab这个靶场是使用Springboot搭建的所以不要下载 jar 文件运行,要使用IDEA运行他的文件夹 先打开pom 然后进行maven一下 改一下端口 配置完成之后修改一下 运行的模式 使用phpstudy搞一个sql数…

基于视频的 AI 内存库,极速语义检索

简介 在大模型应用里,将文本数据分块嵌入存储在向量数据库已经是标准做法。然而,传统向量数据库虽然功能强大,但其高昂的RAM和存储需求,以及复杂的部署运维,常常让开发者望而却步。今天,介绍一个名为 Memv…

接口适配器模式实现令牌桶算法和漏桶算法

以下是令牌桶算法、漏桶算法和雪花算法的清晰对比解析。它们属于完全不同的技术领域,前两者用于流量控制,后者用于分布式ID生成: 1. 令牌桶算法(Token Bucket) 领域:流量整形 / 速率限制核心目标&#xff…

618背后的电商逻辑重构:从价格血战到价值共生

“今年终于没做数学题。” 618进行到一半,行云已经买了很多,大件的有iPad、iWatch,小件的有运动鞋、面膜、纸巾。往年她要凑凑减减,经常要找个店铺凑单,下完单再马上退掉,今年她没废太多脑细胞&#xff0c…

解决 PyTorch 与 Python 3.12 的兼容性问题:`operator torchvision::nms does not exist` 深度解析

解决 PyTorch 与 Python 3.12 的兼容性问题 问题现象错误根源分析终极解决方案🚀 推荐方案:创建 Python 3.11 虚拟环境⚡ 备选方案:使用 PyTorch 夜间构建版(Python 3.12)验证修复技术深度解析最佳实践建议问题现象 当在 Python 3.12 环境中运行以下代码时: from tran…

Git 实战场景

四、标签管理 4.1、标签的理解 在使用 Git 进行版本管理时,**标签(Tag)**扮演着非常重要的角色。它其实就是对某次提交(commit)的一个简洁标识,相当于给这次提交起了一个可读、易记的“别名”。比如&…