python - 类型提示 Type Hints
转自 Python -类型提示 Type Hints - 小菠萝测试笔记 - 博客园 (cnblogs.com)
1|0为什么会有类型提示
- Python是一种
动态类型
语言,这意味着我们在编写代码的时候更为自由,运行时不需要指定
变量类型 - 但是与此同时 IDE 无法像静态类型语言那样分析代码,及时给我们相应的提示,比如字符串的 split 方法
由于不知道参数 s 是什么类型,所以当你敲 s.
的时候不会出现 split 的语法提示
2|0常用类型提示
typing 是在 python 3.5 才有的模块
2|1常用类型提示
int,long,float
: 整型,长整形,浮点型;bool,str
: 布尔型,字符串类型;List, Tuple, Dict, Set
:列表,元组,字典, 集合;Iterable,Iterator
:可迭代类型,迭代器类型;Generator
:生成器类型;
前两行小写的不需要 import,后面三行都需要通过 typing 模块 import 哦
2|2例子
指定函数参数类型
单个参数
多个参数
bool or str
:代表参数 b 可以是布尔类型,也可以是字符串
指定函数返回的参数类型
复杂一点的栗子
那指定类型的时候用 list、set、dict、tuple 可不可以呢?
可以是可以,但是不能指定里面元素数据类型
2|3List[T]、Set[T]
只能传一个类型,传多个会报错
换成
2|4Dict[T,T]
2|5Tuple[T]
可以传入多个
只写一个int,但是赋值两个int
只写一个 int,赋值两个 int 元素会报 warning
写了两个int,但是赋值多于两个
不会报错,但是也会有 warning
指定一个类型,对所有元素生效
3|0类型别名
可以将复杂一点类型给个别名,这样好用一些
3|1变量例子
3|2函数例子
4|0NewType
可以自定义创一个新类型
- 主要用于类型检查
- NewType(name, tp) 返回一个函数,这个函数返回其原本的值
- 静态类型检查器会将新类型看作是原始类型的一个子类
- tp 就是原始类型
可以看到 UserId 其实也是 int 类型
5|0Callable
是一个可调用对象类型
5|1查看对象是否可调用
例子
函数是可调用的,所以是 True,而变量不是可调用对象,所以是 False
5|2Callable 作为函数返回值
6|0TypeVar 泛型
6|1任意类型
6|2指定类型
7|0Any Type
- 一种特殊的类型是 Any
- 静态类型检查器会将每种类型都视为与 Any 兼容,将 Any 视为与每种类型兼容
7|1隐式使用 Any
8|0Union
联合类型
Union[int, str] 表示既可以是 int,也可以是 str
8|1等价写法
8|2union 等价写法
9|0Optional
可选类型
9|1和默认参数有什么不一样
- 官方原话:可选参数具有默认值,具有默认值的可选参数不需要在其类型批注上使用 Optional,因为它是可选的
- 不过 Optional 和默认参数其实没啥实质上的区别,只是写法不同
- 使用 Optional 是为了让 IDE 识别到该参数有一个类型提示,可以传指定的类型和 None,且参数是可选非必传的
Optional[int]
等价于Union[int, None]
- 意味着:既可以传指定的类型 int,也可以传 None
9|2例子
使用 Optional
使用默认参数的写法
这种写法,Pycharm 并不会 warning
重点
Optional[] 里面只能写一个数据类型
__EOF__

本文作者:😎
本文链接:https://www.cnblogs.com/dongye95/p/15427512.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/dongye95/p/15427512.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!