当前位置:

首页 > 编程开发 > Python中的变量类型标注怎么用

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

一、概述1、描述变量类型注解是用来对变量和函数的参数返回值类型做注解,让调用方减少类型方面的错误,也可以提高代码的可读性和易用性。但是,变量类型注解语法传入的类型表述能力有限,不能说明复杂的类型组成情况,因此引用了typing模块,来实现复杂的类型表达。2、常用的数据类型TypeDescriptionint整型integerfloat浮点数字bool布尔(int的子类)str字符(unicode)bytes8位字符object任意对象(公共基类)List[str]字符组成的列表Tuple[int,int]

本文目录

    一、概述

    1、描述

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

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

    2、常用的数据类型

    TypeDescription
    int整型 integer
    float浮点数字
    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 < n:
            yield i #下次迭代时,代码从 yield 的下一条语句(不是下一行)开始执行
            i += 1
     
    print(g(10))
    for i in g(10):
        print(i)
     
    '''执行结果
    
    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,"类型名称更改"))
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Python
    相关文章 更多
    python删除一个列表里的重复元素的方法与代码示例
    python删除一个列表里的重复元素的方法与代码示例

    学习如何使用Python高效删除列表中的重复元素。本文提供5种常见方法的代码示例,涵盖保持顺序与不保持顺序的场景,适合初学者和进阶开发者参考。

    Python写接口的步骤及完整代码示例
    Python写接口的步骤及完整代码示例

    详细讲解使用Python编写Web接口的核心步骤与完整代码示例,涵盖环境准备、路由定义、数据校验、服务启动及调试测试方法。

    codex怎么读取word文档及docx文件操作教程
    codex怎么读取word文档及docx文件操作教程

    介绍如何利用编程工具读取和解析Word文档(docx格式),涵盖基础文本提取代码示例、结构化数据处理逻辑,以及处理复杂排版时的技术局限与替代方案。

    怎么在Python中调用C语言代码提升性能
    怎么在Python中调用C语言代码提升性能

    详细讲解在Python中调用C语言代码提升性能的完整实践指南,包含原理分析、编译步骤、ctypes与CFFI具体实现、性能对比及常见陷阱。

    Python与C语言的性能差异及底层原理
    Python与C语言的性能差异及底层原理

    深入解析Python与C语言在执行效率上的数量级差异,从编译机制、变量内存布局、动态类型推断到GIL锁,系统阐明底层核心原理。

    Python和C语言哪个更适合编程入门
    Python和C语言哪个更适合编程入门

    客观对比Python与C语言在心智负担、底层机制与学习反馈上的核心差异,提供清晰有据的选择标准与切实的入门学习路径。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

    针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

    langgraph python guide中文入门教程详解
    langgraph python guide中文入门教程详解

    本篇LangGraph Python中文入门教程详解,系统梳理StateGraph状态机定义、节点编写、边与条件路由、检查点持久化(MemorySaver)等核心机制,提供从环境安装到完整循环智能体构建的代码示例与实操指导。

    Windows 安装 Python:从官方入口到虚拟环境的可复现实践
    Windows 安装 Python:从官方入口到虚拟环境的可复现实践

    面向后端开发者,基于 Python 官方文档说明如何在 Windows 上安装 Python、创建 venv 虚拟环境及使用 pip 管理依赖。包含可复制命令、验证方法及工具选择边界,避免常见配置误区。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。