python3.5以上版本的注解类型typing
环境说明
python3.5以上
注解说明
在定义函数/方法时声明参数和返回值类型,仅为一种写法约定,无强制约束。让方法定义更加清晰,减少错误。
可以用于第三方的类型检查器、集成开发环境、静态检查器等
from typing import List, Optional
def test(name: str, age: int, scores: Optional[List] = None) -> bool:
if scores:
return True
return False
官方文档
https://docs.python.org/zh-cn/3.10/library/typing.html
辅助工具
pyright 微软出品,静态类型检查工具。以不符合typing定义参数类型的函数调用,会给出错误.VSCode中可以直接安装
常用注解
直接使用
str: 字符串 直接使用
int:int 直接使用
typing中
from typing import List, Dict
有多内置类型,List、Dict、Tuple等
from typing import Dict, List, Tuple
# List[int] 表示 内部值为int类型的列表
# Dict[str, int] 表示字典,键为str,值为int
# Tuple(int, str, int) 表示元组,内部元素值依次为(int, str, int)
# Tuple(int, ...) 表示内部值全部为int的元组
Any
默认值,不加类型注解时,就是Any,任意类型都可以
Union
或。语法格式如 Union[int, str] 表示int或者str
from typing import Union
# Union[int] 等同于 int
# 多重Union会自动解开,重置类型会被忽略
# Union[Union[int, str], int] 等同于 Union[int, str]
Optional
可选的,和Union有些像,注意区分。一般有None默认值的时候使用。仅支持单个类型
from typing import Optional
Optional[int] 等同于 Union[int, None] 会给与默认值
类型别名
给类型一个名字,简化代码
from typing import List
Scores = List[float]
# 如果这里的类型很长 Tuple[int, float, str, bool],甚至可以多类型组合
# 和 score: List[float]是一样的
def get_sum_score(scores: Scores) -> float:
"""获取总分数"""
print(sum(scores))
return sum(scores)
自定义类型NewType
from typing import NewType
UserId = NewType("UserId", int)
def filter_user_name(user_id: UserId) -> str:
"""根据用户id获取用户名"""
print(user_id)
return ""
# 这里必须是 UserId() 否则就不符合类型检查
filter_user_name(UserId(123))
# filter_user_name(123) 无法通过类型检查
|