类型注解

2024-08-06 20:57:48 浏览数 (3)

前言

类型注解为我们提供了一种清晰的方式来描述变量和函数的预期类型,使得代码的意图更加明确。本章详细讲解了类型注解在 Python 中的使用,包括变量和函数的类型注解。


本篇文章参考:黑马程序员

一、变量的类型注解

在PyCharm中编写代码,我们经常能够见到如下提示:

PyCharm自动提示了list对象的append()方法。这是因为 PyCharm 等现代 IDE 能通过类型注解和静态分析来推断变量的类型,这种推断可以帮助 IDE 确定某个对象所具有的方法和属性,从而提供适当的代码补全和自动提示功能。在这段代码中 PyCharm 确定这个对象为 list 类型,分析了 list 类的定义,知道其包含 append() 方法,所以能提供自动提示。

然而,当我们定义一个接收参数的函数,比如func(data)时,PyCharm没有提供任何提示。

这是因为此时PyCharm不确定data的具体类型,因此无法推断出它能够调用的方法或属性。

另外,当我们调用内置模块random的方法并传入参数时,PyCharm能够给出相应的类型提示(快捷键Ctrl p弹出提示),提示传入两个参数,类型是int。

这是因为内置模块和其函数通常在Python的标准库中经过良好的文档化和类型注解,PyCharm能够根据这些预定义的信息来推断参数的类型和返回值的类型。

而对于我们自定义的函数func,仅能提示传入一个参数data,而类型未知。

这是因为PyCharm无法通过代码分析确定自定义函数的参数类型。

使用类型注解可以明确指定参数的类型,从而提升代码的可读性,并增强PyCharm的自动提示能力。Python在3.5版本时引入了类型注解,以便于静态类型检查工具、IDE等第三方工具的使用。

定义:

类型注解指在代码中涉及数据交互的地方提供数据类型的注解(显式的说明)。

主要功能:

  • 帮助第三方IDE工具(如PyCharm)对代码进行类型推断,从而提供更准确的代码提示
  • 帮助开发者自身对变量进行类型注释,以提高代码的可维护性和理解性

支持内容:

  • 变量的类型注解
  • 函数(方法)返回值的类型注解
  • 函数(方法)形参列表的类型注解

基本语法:

语法①:变量:类型

代码语言:python代码运行次数:0复制
# 基础数据类型注解
var_1:int=10
var_2:str="apple"
var_3:bool=True

# 类对象类型注解
class Student:
    pass
stu:Student=Student()

# 基础容器类型注解
my_list=[1,2,3]
my_tuple:tuple=(1,2,3)
my_dict:dict={"年龄":18}

【注意】

  • 元组类型设置类型详细注解,需要为每一个元素都单独标注类型
  • 字典类型设置类型详细注解,需要指定两个类型:一个是键的类型,另一个是值的类型
  • 在无法直接判断变量类型时,才需为其添加类型注解
代码语言:python代码运行次数:0复制
# 容器类详细注解
my_list:list[int]=[1,2,3]
my_tuple:tuple[int,str,bool]=(1,"apple",True)
my_dict:dict[str,int]={"年龄":18}

语法②:# type: 类型

在注释中进行类型注解。

代码语言:python代码运行次数:0复制
# 在注释中进行类型注解
var_1=random   # type:int
var_2=json.load('{"name":"小明"}')   #type:dict[str,str]

def func():
    return 10
var_3=func()   #type:int

【注意】

类型注解只是提示性的,并非决定性的,不会在运行时强制执行类型检查。数据类型和注解类型无法对应也不会导致错误。

例如:

代码语言:python代码运行次数:0复制
my_list:list[str]=[1,2,3]

运行结果:

二、函数的类型注解

①形参注解

如下图示,在编写函数(方法),使用形参data的时候,PyCharm工具没有提供任何提示;在调用函数(方法),传入参数的时候,PyCharm工具仅能提示传入一个参数data,而类型未知。

这是因为我们在定义函数(方法)时,没有给形参进行注解。

基本语法:

def 函数方法名(形参1 : 类型 , …… , 形参N : 类型 ,) :

  函数体

②返回值注解

除此之外,函数(方法)的返回值也可以添加类型注解。

基本语法:

def 函数方法名(形参1 : 类型 , …… , 形参N : 类型 ,) -> 返回值类型 :

  函数体

【注意】

类型注解只是提示性的,并非决定性的,不会在运行时强制执行类型检查。数据类型和注解类型无法对应也不会导致错误。

例如:

代码语言:python代码运行次数:0复制
# 对返回值进行类型注解
def func(data:list)->list:
    return data
func(True)

运行结果:

三、Union类型注解

①定义

在 Python 中,Union 类型注解表示一个变量可以是多种不同类型中的任意一种。

②作用

通常用于定义变量、参数或返回值的类型,提供了一种方式来表示参数或返回值的灵活性,让函数能够同时接受多种类型的输入。

③使用方式

  • 导包:from typing import Union
  • 使用:Union类型, ......, 类型
代码语言:python代码运行次数:0复制
# 导包:从 typing 模块中导入了 Union 类型
from typing import Union
# 定义包含不同类型元素的列表
# 类型注解 list[Union[str, int]] 表示这个列表可以包含 str 和 int 类型的元素
my_list:list[Union[str,int]]=[1,2,"666","apple"]

# 类型注解 Union[int, str] 表示 data 可以是 int 或 str 类型
# 函数的返回类型也使用了 Union[int, str],表示函数可以返回 int 或 str 类型的值
def func(data:Union[int,str])->Union[int,str]:
    pass

0 人点赞