Python 参数变量类型标识

提示:B站码农高天视频学习笔记

文章目录

  • 前言
  • 一、Type Hint 有啥好处?
  • 二、常用使用
    • 总结


前言

python中函数变量的类型标注(Type Hint)。
在编写python代码时,变量需要的类型是在程序运行时才决定的。这种方式灵活方便但对于需要阅读其他人代码时效率将会大大降低。python3.5版本开始引入type hint, 在写代码时可以可选的增加类型标识。


一、Type Hint 有啥好处?

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

print(f(1, 2)) # 

1、函数的可读性增强,能一眼看出此函数的输入及输出类型。
2、当每次调用时,一般的IDE都会提示该函数的输入输出类型,而不用再去阅读源代码,如下图:
Python 参数变量类型标识_第1张图片
3、在安装mypy库后能实时提示输入类型不正确引发的错误
a, 先安装mypy库 pip install mypy
b,在VScode 里面Ctrl + Shift + P, 选择打开设置settings
Python 参数变量类型标识_第2张图片
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
        

Python 参数变量类型标识_第3张图片
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

你可能感兴趣的:(python,开发语言)