python基础语法学习: 类型注解

类型注解

什么是类型注解

在代码中涉及数据交互之时, 对数据类型进行显示的说明, 可以帮助:

  • PycCharm 等开发工具对代码做类型推断协助做代码提示
  • 开发者自身做类型的备注

类型注解支持:

变量的类型注解

函数(方法) 的形参和返回值的类型注解

类型注解只是提示性的, 并非决定性的, 数据类型和注解类型无法对应也不会导致错误

为变量设置类型注解

基础语法:

python 复制代码
变量: 类型

var_1: int = 10
var_2: float = 2.32
var_3: bool: True 
var_4: str = "hello world"

类对象类型注解

python 复制代码
class Student: 
    pass

stu: Student = Student()

基础容器类型注解

python 复制代码
my_list: list = (1, 2, 3)

print(my_list)
print(type(my_list)) # <class 'tuple'> 

my_set: set = {1, 2, 3}
my_dict: dict = {"hello": "world"}

类型注解只是给人 / IDE 看的提示,不会强制转换数据。

容器类型详细注解

python 复制代码
# 容器类型详细注解
my_list: list[int] = [1, 2, 3]
my_tuple: tuple[str, int, bool] = ("hello", 666, True)
my_tuple1: tuple[int, ...] = (666, 43)
my_set: set[int] = {1, 2, 3}
my_dict: dict[int, int] = {1: 3, 32: 8}

注意: 元组类型设置类型详细注解, 需要将每一个元素都标记出来

字典类型设置类型详细注解, 需要两个类型, 第一个是 key, 第二个是value

函数(方法) 的类型注解

形参注解

函数和方法的形参类型注解语法:

python 复制代码
def 函数方法名: (形参名: 类型, 形参名: 类型, ......): 
    pass

例如:

python 复制代码
def add(x: int, y: int):
    return x + y

def func(data: list): 
    pass 

有了类型注解之后, 在调用的时候就可以帮助我们提示参数的类型

返回值注解

函数(方法) 的返回值也是可以添加类型注解的

语法:

python 复制代码
def 函数方法名(形参: 类型, ......, 形参: 类型) -> 返回值类型: 
    pass

例如:

python 复制代码
def func(data: list) -> list: 
    return data

在注释中进行类型注解

除了使用 变量: 类型, 这种语法外, 也可以在注释中进行类型注解

语法:

python 复制代码
#type 类型
python 复制代码
class Student: 
    pass


var_1 = random.randint(1, 10) # type: int 
var_2 = json.loads(data) # type: dict[str, int] 
var_3 = Student()  # type: Student

Union类型

python 复制代码
my_list = [1, 2, "hello", "xinyan"] 
my_dict = {"name": 'xinyan', "age": 18} 

当我们遇到上面这中代码,要进行类型注解, 就不太好描述

这时候就需要用到 Union 类型了

使用Union类型首先要导入对应的包:

python 复制代码
form typing import Union 
python 复制代码
from typing import Union
my_list: list[Union[str, int]] = [1, 2, "hello", "xinyan"] 
my_dict: dict[str, Union[str, int]] = {"name": 'xinyan', "age": 18}

Union 联合类型注解, 在变量注解, 函数(方法) 形参和返回值注解中, 均可以使用

python 复制代码
def func(data: Union[int, str])->Union[int, str]:
    return data 
相关推荐
caimouse1 小时前
ReactOS 图形系统分析(46):DC 工具 — dcutil.c
c语言·开发语言
王志来137944730081 小时前
聚焦五大核心场景:工控服务器机箱平台的垂直深耕之路
运维·服务器·python
xixiaoyunya1 小时前
从零搭建跨域互联网络:个人与小团队的轻量组网方案技术解析
开发语言·智能路由器·php
资源大佬星 课it1 小时前
黑马 Java+AI新版V16零基础就业班视频课程百度网盘下载
java·开发语言·人工智能
zmzb01031 小时前
Python课后习题训练记录Day193
开发语言·python
卷无止境1 小时前
LiteLLM 全面解析开源AI网关如何统一管理百余种大模型
后端·python
郝学胜-神的一滴1 小时前
[简化版 GAMES 104] 现代游戏引擎 06:从Tick时序到邮局模型,拆解确定性世界的底层密码
开发语言·c++·游戏引擎·图形渲染·软件开发·opengl
二十雨辰1 小时前
[Java]-微服务面试题
java·开发语言·微服务
不会代码的小猴1 小时前
6. Qt网络编程
开发语言·c++·笔记·qt·算法