Python 参数变量类型标识

本文介绍了Python中TypeHint的使用,包括增强函数可读性、IDE智能提示、mypy静态类型检查,并通过示例展示了如何对内置类型、自定义类型、列表、字典、可迭代对象以及联合类型进行类型标注。同时,文章提到了Python3.9及更高版本的类型注解简化。TypeHint的使用能提高代码质量,减少错误并提升开发效率。
摘要由CSDN通过智能技术生成

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


前言

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都会提示该函数的输入输出类型,而不用再去阅读源代码,如下图:
不用阅读源代码也能知道函数的输入输出类型
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值