提示:B站码农高天视频学习笔记
python中函数变量的类型标注(Type Hint)。
在编写python代码时,变量需要的类型是在程序运行时才决定的。这种方式灵活方便但对于需要阅读其他人代码时效率将会大大降低。python3.5版本开始引入type hint, 在写代码时可以可选的增加类型标识。
def f(a: int, b: int) -> int:
return a + b
print(f(1, 2)) #
1、函数的可读性增强,能一眼看出此函数的输入及输出类型。
2、当每次调用时,一般的IDE都会提示该函数的输入输出类型,而不用再去阅读源代码,如下图:
3、在安装mypy库后能实时提示输入类型不正确引发的错误
a, 先安装mypy库 pip install mypy
b,在VScode 里面Ctrl + Shift + P, 选择打开设置settings
c,加入以下设置即可
"python.linting.mypyEnabled": true
在安装完mypy后,在函数调用时输入错误的类型时IDE将会报错
1、builtin 类型可以直接用来做类型提示
2、自定义类型
class A:
name = 'A'
def get_name(o: A) -> str:
return o.name
get_name(A) # 类型错误
get_name(A())
3、自定义类型的特殊情况
class Node:
def __init__(self, prev:Node) -> None:
self.prev = prev
self.next = None
在上面代码中由于Node类还没有定义, 所以当参数类型时类的本身的时候会出现错误。解决办法是在在类型上加上引号
class Node:
def __init__(self, prev:'Node') -> None:
self.prev = prev
self.next = None
4、关于list类型,不仅需要检查list 本身是否符合要求, 还需要检查list里面的元素是否符合类型要求
from typing import List
def sum_(lst: List[int]) -> int:
total = 0
for i in lst:
total += i
return total
sum_([0, 1, 2])
sum_([1, '2', 3]) # list里面的元素不符合
在Python3.9 以后的版本可以不使用typing模块
def sum_(lst: list[int]) -> int:
total = 0
for i in lst:
total += i
return total
sum_([0, 1, 2])
sum_([1, "2", 3])
更通用的做法是引入Sequence
from typing import Sequence
def sum_(lst: Sequence[int]) -> int:
total = 0
for i in lst:
total += i
return total
sum_([0, 1, 2])
sum_((1, 2, 3))
sum_(b"012")
sum_(range(3))
5、字典类型
from typing import Dict
def sum1(d: Dict[int, int]) -> int:
total = 0
for i in d.values():
total += i
return total
sum1({'a': 1, 'b': 2, 'c': 3})
6、当参数的类型有可能是两个或者两个以上时,可以使用Union
from typing import Union
def f(x: Union[int, None]) -> int:
if x is None:
return 0
return x
同时在Python3.10里面Union,可以简写为“|”
def f(x: int | None) -> int:
if x is None:
return 0
return x
介绍了type hint的基础用法
原视频连接https://www.bilibili.com/video/BV11Z4y1h79y?spm_id_from=333.999.0.0