自学内容网 自学内容网

Python 类型检查

今天我们来聊聊Python中的类型标注 (Type Annotation)。

基本用法

假如我写了这么个函数add

def add(a, b):
return a + b
add(1, 2)

我的本意是求两个整数a,b的和。

但因为Python是动态类型语言,实际上add的用法比我设计的求整数和要多得多。他可以求小数的和,可以链接字符串,甚至可以链接两个列表。

add(1.1, 2.2)
add("a", "b")
add([1], [2])

这样别人在用这个函数的时候就容易出错。时间长了,没准我自己都不一定知道当时设计的本意。

解决这个问题的方法有很多,比如加个注释。

'''
Add 2 integers together
'''
def add(a, b):
return a + b

但注释这个东西不是人人都读的。特别像这种一看就特智障的函数,我一般就直接拿过来用了。

也可以给函数起个好点的名字。

'''
Add 2 integer together
'''
def add_interger(a, b):
return a + b

但这样不防手抖,没准我用的时候一不小心就传了一些奇怪的东西。

当然我还可以在add里判断一下a,b是不是整数

'''
Add 2 integer together
'''
def add_interger(a, b):
if not isinstance(a, int) or not isinstance(b, int):
raise Exception()

return a + b

可惜这个错误只有运行程序才能被发现。

Python的类型标注能更好的解决这个问题。(实际工程中我建议同时保留前面的改动)

def add(a: int, b: int) -> int:
return a + b

于是变量和返回值的类型一目了然。

不错人总是会出错的。即便标注了类型还是可能手滑写出错误的调用。而且类型注释是不影响程序的运行的。即便是传递错误的类型,python还是会照常运行。如下

# test.py
def add(a: int, b: int) -> int:
return a + b

print(add("a", "b"))

但我们可以用静态类型检查器找出这种错误。Python社区中有很多静态类型检查器,它们功能都大差不差,这里我用的是mypy。

如果没有安装可以用pip3来安装。

pip3 install mypy

命令行调用mypy加上目录或者py文件路径,就可以进行检查了。

$ mypy 

原文地址:https://blog.csdn.net/weixin_42451919/article/details/145286134

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!