python——typing模块
typing
主要用于限制数据类型范围使用。
Any
允许设置为任意数据类型的值,使用object作为类型提示也有相同的效果,因为它是Python中所有数据类型的基类。但any类型提示比object更容易让人理解。
from typing import Any
spam: Any = None
spam = "222"
print(spam)
spam = 3.14
print(type(spam))
# Success: no issues found in 1 source file
指定Any类型提示和不指定类型提示的区别在于,Any明确指出变量或函数接收任何类型的值,而不指定类型提示则表明该变量或函数尚未进行类型提示。
尚未进行类型提示意味着它既可能是任意类型,也可能是某种具体类型。
Union
设置允许的数据类型范围,如果需要加入None,那么就直接加,而不用加Nonetype
from typing import Union
spam: Union[int, str]
spam = 33
print(spam)
spam = "222"
print(spam)
spam = 3.14
print(type(spam))
Optional
如果要使用None,那么推荐使用Optional来进行,使用mypy进行分析的时候,将会报出错误。
from typing import Optional
spam: Optional[str] = None
spam = "222"
print(spam)
spam = 3.14
print(type(spam))
#web_test.py:12: error: Incompatible types in assignment (expression has type "float", variable has type "str | None") [assignment]
为列表,字典等设置类型提示
为list指定为某个值的数据类型提示,那么这个值必须包含一个列表,但这个列表的内容是任何类型的值。
为了具体指定列表中的值的数据类型,必须使用typing模块的List类型提示。
from typing import List
spam: List[str] = ['111', '222', '333', '444']
spam.append(111)
print(type(spam))
# web_test.py:11: error: Argument 1 to "append" of "list" has incompatible type "int"; expected "str" [arg-type]
# Found 1 error in 1 file (checked 1 source file)
from typing import List, Union
spam: List[Union[str, int]] = ['111', '222', '333', '444']
spam.append(111)
print(type(spam))
# Found 1 error in 1 file (checked 1 source file)
typing模块对于每种容器类型都有单独的类型别名。
"""
List 指列表(list)数据类型
Tuple 指元组(tuple)数据类型
Dict 指字典(dict)数据类型
Set 指集合(set)数据类型
FrozenSet 指不可变集合(frozenset)数据类型
Sequence 指列表、元组或任何其他程序数据类型
Mapping指字典、集合、不可变集合或者任何其他映射数据类型
ByteString 指bytes、bytearray和memoryview类型
"""
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)