先看代码
def add(x: int, y: int) -> int:
return x + y
没用过类型注解(Type Annotations)的同学可能咋一看有点迷糊,其实上面这段代码和下面这个代码是一样的。
def add(x, y):
return x + y
类型注解介绍
我们知道 Python 是一种动态语言,变量以及函数的参数是不区分类型。
Python解释器会在运行的时候动态判断变量和参数的类型,这样的好处是编写代码速度很快,很灵活,但是坏处也很明显,不好维护,可能代码写过一段时间重新看就很难理解了,因为那些变量、参数、函数返回值的类型,全都给忘记了。
而且当你在读别人的代码的时候,也无法一眼看出变量或者参数的类型,经常要自己推敲,这样给学习带来了很大的障碍。
所以Python3里有了这个新特性,可以给参数、函数返回值和变量的类型加上注解,不过这个仅仅是注释而已,对代码的运行来说没有任何影响,变量的真正类型还是会有Python解释器来确定,你所做的只是在提高代码的可读性,仅此而已。
看代码
def add(x: int, y: int) -> int:
return x + y
def area_calculation(radius: float) -> float:
# 变量类型注解需要 py3.6 以上版本
# Var Type Annotations need python 3.6 and later
pi: float = 3.1415926
return radius * radius * pi
if __name__ == '__main__':
print(add(1, 2))
print(add.__annotations__)
print(area_calculation(2))
print(area_calculation.__annotations__)
运行结果:
3
{'x': <class 'int'>, 'y': <class 'int'>, 'return': <class 'int'>}
12.5663704
{'radius': <class 'float'>, 'return': <class 'float'>}
这里调用了函数的__annotations__
属性,通过这个属性可以看到参数和返回值类型的注解。
测试注解的正确性
前面说了,这个注解仅仅起到了注释的作用,不会影响代码的执行,所以即使你类型注解写错了,程序运行的时候还是会按照正确的类型去运行。
然后,Python提供了一个工具方便我们测试代码里的类型注解正确性,mypy
首先安装:
pip install mypy
使用测试:
mypy filename.py
如果没有错误则没有输出,如果有错误则会有相应输出,如
$ mypy demo.py
demo.py:14: error: Incompatible return value type (got "float", expected "int")
About
了解更多有趣的操作请关注我的微信公众号:DealiAxy
每一篇文章都在我的博客有收录:blog.deali.cn
网友评论