Python中的变量类型标注怎么用
一、概述
1、描述
变量类型注解是用来对变量和函数的参数返回值类型做注解,让调用方减少类型方面的错误,也可以提高代码的可读性和易用性。
但是,变量类型注解语法传入的类型表述能力有限,不能说明复杂的类型组成情况,因此引用了typing模块,来实现复杂的类型表达。
2、常用的数据类型
Type | Description |
---|---|
int | 整型 integer |
float | 浮点数字 |
bool | 布尔(int 的子类) |
str | 字符 (unicode) |
bytes | 8 位字符 |
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 的泛型 |
MutableMapping | Mapping 对象的子类,可变 |
Generator | 生成器类型, Generator[YieldType、SendType、ReturnType] |
NoReturn | 函数没有返回结果 |
Set | 集合 set 的泛型, 推荐用于注解返回类型 |
AbstractSet | collections.abc.Set 的泛型,推荐用于注解参数 |
Sequence | collections.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 < n: yield i #下次迭代时,代码从 yield 的下一条语句(不是下一行)开始执行 i += 1 print(g(10)) for i in g(10): print(i) '''执行结果 <generator object g at 0x00000000014E88E0> 0 1 2 3 4 5 6 7 8 9 '''
3、混合类型检查改进
1.联合运算符
联合运算符使用 " | " 线来替代了旧版本中Union[] 方法,使得程序更简洁
#新版本 def get_name(user: str | dict) -> 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中的变量类型标注怎么用的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PS“正在载入”问题是由资源访问或处理问题引起的:硬盘读取速度慢或有坏道:使用CrystalDiskInfo检查硬盘健康状况并更换有问题的硬盘。内存不足:升级内存以满足PS对高分辨率图片和复杂图层处理的需求。显卡驱动程序过时或损坏:更新驱动程序以优化PS和显卡之间的通信。文件路径过长或文件名有特殊字符:使用简短的路径和避免使用特殊字符。PS自身问题:重新安装或修复PS安装程序。

PS启动时卡在“正在载入”可能是由于各种原因造成的:禁用损坏或冲突的插件。删除或重命名损坏的配置文件。关闭不必要的程序或升级内存,避免内存不足。升级到固态硬盘,加快硬盘读取速度。重装PS修复损坏的系统文件或安装包问题。查看错误日志分析启动过程中的错误信息。

PS打开文件时出现“正在载入”卡顿,原因可能包括:文件过大或损坏、内存不足、硬盘速度慢、显卡驱动问题、PS版本或插件冲突。解决方法依次为:检查文件大小和完整性、增加内存、升级硬盘、更新显卡驱动、卸载或禁用可疑插件、重装PS。通过逐步排查,并善用PS的性能设置,养成良好的文件管理习惯,可以有效解决该问题。

文章介绍了MySQL数据库的上手操作。首先,需安装MySQL客户端,如MySQLWorkbench或命令行客户端。1.使用mysql-uroot-p命令连接服务器,并使用root账户密码登录;2.使用CREATEDATABASE创建数据库,USE选择数据库;3.使用CREATETABLE创建表,定义字段及数据类型;4.使用INSERTINTO插入数据,SELECT查询数据,UPDATE更新数据,DELETE删除数据。熟练掌握这些步骤,并学习处理常见问题和优化数据库性能,才能高效使用MySQL。

羽化控制的关键在于理解其渐变本质。PS本身不提供直接控制渐变曲线的选项,但你可以通过多次羽化、配合蒙版、精细选区,灵活调整半径和渐变柔和度,实现自然过渡效果。

MySQL 有免费的社区版和收费的企业版。社区版可免费使用和修改,但支持有限,适合稳定性要求不高、技术能力强的应用。企业版提供全面商业支持,适合需要稳定可靠、高性能数据库且愿意为支持买单的应用。选择版本时考虑的因素包括应用关键性、预算和技术技能。没有完美的选项,只有最合适的方案,需根据具体情况谨慎选择。

MySQL性能优化需从安装配置、索引及查询优化、监控与调优三个方面入手。1.安装后需根据服务器配置调整my.cnf文件,例如innodb_buffer_pool_size参数,并关闭query_cache_size;2.创建合适的索引,避免索引过多,并优化查询语句,例如使用EXPLAIN命令分析执行计划;3.利用MySQL自带监控工具(SHOWPROCESSLIST,SHOWSTATUS)监控数据库运行状况,定期备份和整理数据库。通过这些步骤,持续优化,才能提升MySQL数据库性能。

PS卡在载入界面可能是由软件自身(文件损坏或插件冲突)、系统环境(驱动过时或系统文件损坏)或硬件(硬盘损坏或内存条故障)问题造成的。首先检查计算机资源是否充足,关闭后台程序释放内存和CPU资源。修复PS安装或检查插件是否存在兼容性问题。更新或回退PS版本。检查显卡驱动并更新,运行系统文件检查。若排除上述问题,则可以尝试硬盘检测和内存测试。
