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类型

"""

 

posted @   新兵蛋Z  阅读(71)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示