【python】给函数参数和返回值标注类型

ops/2024/10/21 11:30:17/

目录

(1)类型标注进化历史

从Python 3.0开始的类型标注

从Python 3.5开始的类型标注库 typing

(2)更细化的类型标注

1.返回一个列表,且列表的元素类型是指定的

2.返回字典类型,键和值都是指定类型

3.返回自定义类型


(1)类型标注进化历史

从Python 3.0开始的类型标注

Python 3.0开始,Python 已经支持基础的类型标注,例如,你可以在函数声明中这样写:

python">def func(a: int, b: str) -> bool:return b.isdigit() and a > int(b)

这里的int, str, bool都是类型标注,他们说明了函数参数和返回值的类型。

从Python 3.5开始的类型标注库 typing

从 Python 3.5开始,Python 增加了一个新的模块,叫做typing。这个模块定义了很多用于类型标注的类和函数,包括一些容器类型,例如List, Dict, Tuple等。

python">from typing import List, Dict def func(a: List[int], b: Dict[str, int]) -> bool: p1 = all(isinstance(x, int) for x in a)p2 = all(isinstance(k, str) and isinstance(v, int) for k, v in b.items())ret = p1 and p2 return ret

这里的List[int]和Dict[str, int]是类型标注,他们分别表示一个整数列表和一个以字符串为键,整数为值的字典。

(2)更细化的类型标注

1.返回一个列表,且列表的元素类型是指定的

如果你想要指定一个函数返回一个列表,且列表的元素具有特定类型,你可以使用类型提示来实现。以下是一个简单的例子:

python">from typing import Listdef create_list_of_integers(length: int) -> List[int]:result = [i for i in range(length)]return result# 调用函数
my_list = create_list_of_integers(5)
print(my_list)

在这个例子中,create_list_of_integers 函数接受一个整数参数 length,并返回一个包含整数的列表。通过在函数声明中使用 -> List[int],我们明确了返回的是整数类型的列表。

如果你的函数返回的列表包含不同类型的元素,你可以使用 Union 类型来表示这个混合类型的列表。例如:

python">from typing import List, Uniondef create_mixed_list(length: int) -> List[Union[int, str]]:result = [i if i % 2 == 0 else str(i) for i in range(length)]return result# 调用函数
mixed_list = create_mixed_list(5)
print(mixed_list)

在这个例子中,create_mixed_list 函数返回一个包含整数和字符串的列表。使用 Union[int, str] 来表示列表的元素类型可以容纳这两种不同的数据类型。

2.返回字典类型,键和值都是指定类型

如果你想要指定一个函数返回一个字典,且字典的键和值都具有特定的类型,你可以使用类型提示。以下是一个例子:

python">from typing import Dictdef create_dict_of_integers(length: int) -> Dict[int, int]:result = {i: i * 2 for i in range(length)}return result# 调用函数
my_dict = create_dict_of_integers(5)
print(my_dict)

在这个例子中,create_dict_of_integers 函数接受一个整数参数 length,并返回一个字典,其中键和值都是整数类型。通过在函数声明中使用 -> Dict[int, int],我们明确了返回的字典的键和值的类型。

如果你的函数返回的字典包含不同类型的键和值,你可以使用 Dict 和 Union 类型。例如:

python">from typing import Dict, Uniondef create_mixed_dict(length: int) -> Dict[Union[int, str], Union[int, str]]:result = {i: str(i) if i % 2 == 0 else i for i in range(length)}return result# 调用函数
mixed_dict = create_mixed_dict(5)
print(mixed_dict)

在这个例子中,create_mixed_dict 函数返回一个包含整数和字符串的字典,使用 Dict[Union[int, str], Union[int, str]] 来表示字典的键和值的混合类型。

3.返回自定义类型

像下面这样,自定义了一个DataInfo类,函数get_data_info()指定返回一个列表,且列表的元素类型必须为DataInfo。

python">from typing import List, Dictclass DataInfo(object):def __init__(self):self.name = "tom"self.age = 18self.value_list = []self.test_ret = 0.3789self.income_dict = dict()def get_data_info() -> List[DataInfo]:m = DataInfo()x = [m]return xret = get_data_info()
print(ret[0].test_ret)

end


http://www.ppmy.cn/ops/27305.html

相关文章

mamba 和conda 安装R包

**1. 下载miniconda3 ** wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh这个命令是在linux终端中输入的,miniconda3管理起来更方便。 2. 安装miniconda3 sh Miniconda3-latest-Linux-x86_64.sh接下来会有一些回车(ente…

react 笔记

vscode bookmarks react源码 v18.2.0 jsx语法转换成reactelement reactapi npx creatte-react-app 项目名称(myreactapp) cd 项目名称(myreactapp) npm start启动项目 看index.js文件 React ReactDom App 看App.js文件 react有…

深入了解Java中的Thread类

在Java编程中,Thread类是一个核心的类,用于创建和管理线程。线程是程序执行的最小单元,多线程编程可以提高程序的并发性和效率。 本文将深入介绍Java中的Thread类,包括其基本概念、创建线程的方法、线程状态的转换、线程同步与通…

数据库分库分表

数据库分库分表 分库分表到底是什么 分库分表其实是分库,分表,分库分表的总称 分库 将数据按照一定规则存储到不同的数据库中,每个数据库存储一部分数据 分库主要解决的是并发量过大的问题,并发量一旦上升,那么数据库就可能成为系统的瓶颈&#xff…

nginx下载安装配置(含ssl)

下载安装环节 wget https://nginx.org/download/nginx-1.24.0.tar.gz tar -zxvf xxx.tar.gz yum -y install pcre-devel openssl openssl-devel ./configure --prefix/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream make & make i…

JET毛选学习笔记:如何利用《矛盾论》从做实验到做科研vol. 3

上一节讲了矛盾的同一性和斗争性,分享了一些自己关于“对立统一”的“暴论”。这一节,来分享的内容是主要矛盾和次要矛盾。 六、主要矛盾和次要矛盾 马列主义毛泽东思想教育下的我们,对两个概念应该很熟悉啦,不过大多是知其然不…

04_Scala网络序列化

文章目录 **1.网络****2. 序列化** 1.网络 Scala进行网络数据交互,使用是Java的IO类 实现案例:客户端连接服务器,向服务器发送数据; 1.创建两个文件,CLIENT,Server obj类型** ** Server端 2.在Server端…

【GO】命令行解析 os 与 flag

目录 OS解析命令 简单用法 进阶用法 flag命令解析 基础实例 1. 自定义数据类型 2. 创建多个 FlagSet 3. 整合环境变量和配置文件 os与flag 关键点解析 程序的作用 示例命令行调用 在 Go 语言中,命令行解析是一项基本且常用的功能,它允许开发者…