Python是一种动态类型语言,使用变量之前不需要声明其类型,直接赋值即可创建变量,变量初始类型取决于等号右侧表达式的值的类型。创建之后,变量的类型可以随时发生变化,但在任何时刻,每个变量都有确定的类型。在定义函数和类的方法时,也不需要声明形参类型,完全取决于实参类型。
当Python用于大型项目时候,没有类型这个Python的特征的弱点就暴露出来,使调试变得困难,虽然Python不支持类型声明,但是有一可用折中方案——标注(annotation:标注, 注解),也称为类型提示(type hint),从python3.5开始引入,用以明确形参类型,但不是强制要求,并不影响Python解释器执行 Python 代码指令的结果。
标注(Annotation)是与变量(variable)、类属性(class attribute)、函数参数或返回值相关联的标签(label),被约定作为 类型提示(type hint) 来使用。
局部变量(local variables)的Annotation在运行时无法访问,但全局变量、类属性和函数的Annotation分别存储在模块、类和函数的__annotations__特殊属性(special attribute)中。
官方介绍https://docs.python.org/zh-cn/3/glossary.html#term-annotation
常见的用于标注(annotation)的数据类型
int、long、float: 整型,长整形,浮点型
str:字符串类型
bool: 布尔型
List、 Tuple、Dic、Set:列表、元组、字典、集合
Iterable、Iterator:可迭代类型、迭代器类型
Generator:生成器类型
Sequence:序列
一般规则是参数名后跟一个冒号,后跟类型;函数返回值的形式是 -> 类型
接受并返回一个字符串的函数,一般写法:
def hi(name):
return 'Hello ' + name
print(hi('wang')) #输出:Hello wang
添加标注(annotation)的写法:
def hi(name: str) -> str:
return 'Hello ' + name
print(hi('wang')) #输出:Hello wang
这有什么用?
mypy 是 Python 中的静态类型检查器。写完带有类型提示的代码之后,可以使用mypy来检查下你的代码,如果有错误,会提示你。
关于mypy,可见 https://blog.csdn.net/somenzz/article/details/121551037
对python的标注进一步了解,可见
详解Python中函数和模块的特殊属性__annotations__ https://cloud.tencent.com/developer/article/1607611