Python中的变量类型标注怎么用

您所在的位置:网站首页 python中的判断语句有哪些 Python中的变量类型标注怎么用

Python中的变量类型标注怎么用

2023-04-12 14:42| 来源: 网络整理| 查看: 265

Python中的变量类型标注怎么用 发布时间:2023-04-11 11:33:04 来源:亿速云 阅读:75 作者:iii 栏目:开发技术

这篇文章主要讲解了“Python中的变量类型标注怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中的变量类型标注怎么用”吧!

一、概述1、描述

变量类型注解是用来对变量和函数的参数返回值类型做注解,让调用方减少类型方面的错误,也可以提高代码的可读性和易用性。

但是,变量类型注解语法传入的类型表述能力有限,不能说明复杂的类型组成情况,因此引用了typing模块,来实现复杂的类型表达。

2、常用的数据类型TypeDescriptionint整型 integerfloat浮点数字bool布尔(int 的子类)str字符 (unicode)bytes8 位字符object任意对象(公共基类)List[str]字符组成的列表Tuple[int, int]两个int对象的元组Tuple[int, ...]任意数量的 int 对象的元组Dict[str, int]键是 str 值是 int 的字典Iterable[int]包含 int 的可迭代对象Sequence[bool]布尔值序列(只读)Mapping[str, int]从 str 键到 int 值的映射(只读)Any具有任意类型的动态类型值Union联合类型Optional参数可以为空或已经声明的类型Mapping映射,是 collections.abc.Mapping 的泛型MutableMappingMapping 对象的子类,可变Generator生成器类型, Generator[YieldType、SendType、ReturnType]NoReturn函数没有返回结果Set集合 set 的泛型, 推荐用于注解返回类型AbstractSetcollections.abc.Set 的泛型,推荐用于注解参数Sequencecollections.abc.Sequence 的泛型,list、tuple 等的泛化类型TypeVar自定义兼容特定类型的变量Generic自定义泛型类型NewType声明一些具有特殊含义的类型Callable可调用类型, Callable[[参数类型], 返回类型]NoReturn没法返回值3、mypy模块

mypy是Python的可选静态类型检查器

安装mypy模块 pip3 install mypy

使用mypy进行静态类型检查 mypy 执行 python 文件

二、使用1、基本使用from typing import List, Set, Dict, Tuple #对于简单的 Python 内置类型,只需使用类型的名称 x1: int = 1 x2: float = 1.0 x3: bool = True x4: str = "test" x5: bytes = b"test"   # 对于 collections ,类型名称用大写字母表示,并且 # collections 内类型的名称在方括号中 x6: List[int] = [1] x7: Set[int] = {6, 7} #对于映射,需要键和值的类型 x8: Dict[str, float] = {'field': 2.0} #对于固定大小的元祖,指定所有元素的类型 x9: Tuple[int, str, float] = (3, "yes", 7.5) #对于可变大小的元祖,使用一种类型和省略号 x10: Tuple[int, ...] = (1, 2, 3)   '''在终端执行检查 (venv) D:\python>mypy .\01.py Success: no issues found in 1 source file '''2、函数参数返回值添加类型标注

1. 指定多个参数的方式

''' 定义一个函数   参数 num int类型 返回值 字符串类型 使用mypy检测 ''' def num_fun(num: int) -> str:     return str(num)   num_fun(100) print(num_fun(100))   # 指定多个参数的方式 def plus(num1: int, num2: int) -> int:     return num1 + num2   # 在类型注释后为参数添加默认值,默认值需要添加在末尾 ''' 声明函数参数时,所有带有默认值的参数必须放在非默认参数的后面。 这是因为 Python 解释器需要确定参数传递的顺序, 如果默认参数放在非默认参数前面,解释器就无法确定哪个参数是哪个 ''' def func1(num1: int, my_float: float = 3.5)-> float:     return num1 + my_float print(func1(10,20)) f = func1 print(f(10))

2. Callable

Callable 是一个抽象类,用于描述可调用对象的基本行为,例如函数、方法和类。当你声明一个函数变量并将其分配给一个变量时,这个变量只是一个普通的 Python 对象,并不是一个可调用对象,因此它没有默认值

带有默认值的参数可以放在任何位置,但是在声明函数参数时,所有带有默认值的参数必须放在非默认参数的后面。这是因为 Python 解释器需要确定参数传递的顺序,如果默认参数放在非默认参数前面,解释器就无法确定哪个参数是哪个。

from typing import  Callable #定义变量  指向一个函数 def func2(num1:int, my_float=3.5) -> str:     return f'返回结果{num1 + my_float}' print(func2(10)) #Callable指向可调用(函数)值的方式 x: Callable[[int, float], str] = func2 print(x(10, 3.5))   ''' 执行结果 返回结果13.5 返回结果13.5 '''

3. Iterator

#定义函数,产生整数的生成器,每次返回一个 from typing import Iterator # 产生整数的生成器函数安全地返回只是一个 整数迭代器的函数 #,因此这就是我们对其进行注释的方式 def g(n: int) -> Iterator[int]:     i = 0     while i  str:     if isinstance(user, str):         return user     elif isinstance(user, dict):         return user.get('name', '') print(get_name({'name':'Bob'})) print(get_name("Alice"))

在这个例子中,函数get_name接受一个参数user,它可以是一个字符串或一个字典。如果user是一个字符串,函数会直接返回这个字符串;如果user是一个字典,函数会尝试从字典中获取name字段的值,并返回它。

在这个例子中,我们使用联合运算符将str和dict类型组合起来,表示user可以是这两种类型之一。

#旧版本,Union方法来实现相同的功能 from typing import Union def get_name2(user: Union[str, dict]) -> str:     if isinstance(user, str):         return user     elif isinstance(user, dict):         return user.get('name', '')   print(get_name2({'name':'Bob'})) print(get_name2("Alice")) '''执行结果 Bob Alice '''4、类型别名更改#旧版本 oldname = str def oldFunc(param:oldname) -> oldname:     return param + param oldFunc('oldFunc:花非人陌')     #新版本,从3.10后开始支持 from typing import TypeAlias   newstr :TypeAlias = str    #定义类型别名 newint :TypeAlias = int def func_test(num:newint, msg:newstr)->newstr:     return str(num) + msg print(func_test(100,"类型名称更改"))

感谢各位的阅读,以上就是“Python中的变量类型标注怎么用”的内容了,经过本文的学习后,相信大家对Python中的变量类型标注怎么用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读: Python Excel数据处理之xlrd/xlwt/xlutils模块怎么使用 怎么用Python+Matplotlib绘制三维折线图

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:[email protected]进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python 上一篇新闻:IDEA中怎么引入spring的命名空间 下一篇新闻:PHP数组中怎么实现多条件筛选 猜你喜欢 微信小程序开发时遇到的坑有哪些 怎么在R语言中导入CSV数据 怎么在Python中写入Excel的格式 Python中有哪些常见的加密操作 springboot框架的全局异常怎么处理 使用R语言怎么删除/添加数据框中的某一行/列 python怎么实现棋盘覆盖问题及可视化 Java Synchronize下的volatile关键字是什么 Python 爬虫库RoboBrowser怎么用 如何在python中使用openpyxl实现带格式复制表格


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3