很多时候我们可能不清楚函数参数类型或者返回值类型,很有可能导致一些类型没有指定方法,当代码量很多在写完代码一段时间后, 很可能忘记了自己写的函数需要传什么参数,返回什么类型的结果。就不得不去阅读代码的具体内容,降低了阅读的速度,typing模块可以很好的解决这个问题。
自python3.5开始,PEP484为python引入了类型注解(type hints),typing的主要作用有:
简单来说,Type Hints有2个作用: 1.让编辑器识别,编辑器能智能提示相关语法,语法错误时有黄色告警。 2.方便其他python开发人员阅读代码,知道每个参数的类型,函数、方法返回值类型。
变量赋值时也可以用类型注解
x = 1 y = "hello" # 类型注解 x1: int = 11 y2: str = "world" print(x1)
print(y2)
如果仅仅只是声明了类型,没赋值
y3: str
print(y3)
运行会报错:NameError: name 'y3' is not defined
当我们定义一个函数, 声明参数和返回值都是int类型
def add_int(a: int, b: int) -> str:
return f"{a}-{b}" r = add_int(2, 'hello')
print(r)
类型注解就是在参数后面通过冒号的方式加入了类型的说明, 代码简单解释:
a: int
: 指定了输入参数 a 为 int 类型b: int
: 指定了输入参数 b为 int 类型-> str
: 指定了 函数的返回值为 srt 类型当参数b传了一个字符串参数,会出现黄牌警告
但非常重要的一点是,pycharm只是提出了警告,但实际上运行是不会报错。这其实是python这种语言在工程实践中的一种非常优雅的处理方式 新的功能(Type Hints)不会影响原来的代码(如果变为强制报错,那原来写的代码就都不能运行了) 即使不适用新的功能(Type Hints)代码也可以正常运行
以下示例:
x: list
: 指定了输入参数 x 为 list 类型y: str
: 指定了输入参数 y 为 str 类型def demo2(x: list, y: str) -> list:
x.append(y)
return x
当x传参不是list类型时,会直接有黄色警告提示参数类型不正确,这样可以避免传入错误的参数类型,导致代码错误。
声明x变量为list类型,还有个好处,在函数内部写代码时,可以让编辑器快速智能提示list 对象对应的方法
tuple 和 list 差不多就不介绍了。
dict 类型示例
def demo3(a: dict, address: str) -> dict:
a.update(address=address)
return a
r = demo3({"name": "yoyo"}, "上海市")
print(r)
其它更多类型,可以看typing模块