首页 > 编程语言 >Python 语言的类型提示系统

Python 语言的类型提示系统

时间:2024-01-31 19:44:34浏览次数:29  
标签:语言 Python 代码 PEP 提示 int 类型 注解

Python 语言的类型提示系统 PEP 484

Python 语言的类型提示系统是一种在代码中添加类型信息的机制,它允许开发者在变量、函数参数和返回值等地方添加类型注解。这种类型提示系统是通过 PEP 484 中引入的,从 Python 3.5 版本开始,它提供了以下主要特征:

  1. 类型注解语法: 使用冒号(:)来指定变量、函数参数和返回值的类型。例如:

    name: str = "John"
    def add(x: int, y: int) -> int:
        return x + y
    
  2. 函数参数和返回类型注解: 允许在函数定义中添加参数和返回值的类型注解,这有助于提供更清晰的接口信息。例如:

    def greet(name: str) -> str:
        return f"Hello, {name}!"
    
  3. 类型检查工具: PEP 484 提供了一种静态类型检查的框架,使得开发者可以使用类型检查工具(如mypy)对代码进行检查,以寻找潜在的类型错误。这有助于在运行时之前发现一些常见的错误。

  4. 类型提示工具支持: 通过添加类型提示,使得编辑器和集成开发环境(IDE)能够提供更好的代码补全、静态分析、文档生成等功能。这提高了开发效率,并帮助开发者更好地理解和维护代码。

值得注意的是,Python 的类型提示系统是可选的,不会影响程序的运行,但它为开发者提供了一种在代码中增加类型信息、提高代码质量和可读性的方式。

  • PEP 484

    PEP 484 是 Python Enhancement Proposal(Python 增强提案)的一部分,定义了 Python 语言的类型提示系统。PEP 484 是在 Python 3.5 版本中引入的,通过类型提示可以帮助开发者更好地理解和维护代码,提高代码的可读性和可维护性。

    主要特征和目标包括:

    1. 类型注解语法: 引入了新的语法,使用冒号来指定变量的类型,例如:x: int
    2. 函数参数和返回类型注解: 允许在函数定义中添加参数和返回值的类型注解,例如:def add(x: int, y: int) -> int:
    3. 类型检查工具: 为了帮助开发者进行静态类型检查,引入了类型检查工具,如mypy。这允许开发者在编写代码时就能够发现一些潜在的类型错误,而不是在运行时才暴露。
    4. 类型提示工具支持: 通过添加类型提示,使得编辑器和 IDE 能够提供更好的代码补全、静态分析和文档生成功能。

    使用 PEP 484 中的类型提示是可选的,它不会影响 Python 运行时的行为,但对于静态分析工具和类型检查工具来说,它们可以使用这些类型提示提供更准确的信息。

  • 类型注解

    类型注解是在编程语言中通过特定语法形式添加的用于表示变量、函数参数和返回值等的类型信息。在 Python 中,类型注解是通过冒号(:)实现的,可以用来明确指定变量的类型、函数参数的类型以及函数返回值的类型。

    例如,在 Python 中使用类型注解的示例:

    name: str = "John"  # 表示 name 是一个字符串类型的变量
    
    def add(x: int, y: int) -> int:  # 表示函数 add 接受两个整数类型的参数,并返回一个整数类型的值
        return x + y
    

    这里,name: str 表示变量 name 的类型是字符串(str),而 x: inty: int 表示函数 add 的两个参数 xy 都是整数类型,而 -> int 表示函数返回的类型是整数。

    虽然类型注解提供了类型信息,但它在 Python 中是可选的,并不会影响代码的运行。它主要用于提供更好的开发工具支持(如编辑器的代码补全和静态分析)以及静态类型检查工具(如mypy)的使用。这有助于在开发过程中更早地捕获一些潜在的类型错误。

  • 和普通的区别:普通的定义(动态类型)是直接自动划分类型的,( 变量的类型是根据赋值的值自动推断的,无需显式声明类型。)而类型注解是规定了的,方便后期团队对于代码的维护。

    类型注解和动态类型的使用方式在 Python 中有一些区别,并且适用于不同的场景。以下是它们之间的主要区别和不同的运用场景:

    1. 类型注解(Type Annotations):
      • 语法: 使用冒号(:)来指定变量、函数参数和返回值的类型。

      • 示例:

        name: str = "John"
        def add(x: int, y: int) -> int:
            return x + y
        
      • 用途:

        • 提供给开发者和工具更多的类型信息,增强了代码的可读性和可维护性。
        • 支持静态类型检查工具(如mypy)进行类型检查,帮助在开发阶段尽早发现潜在的类型错误。
        • 为编辑器和 IDE 提供更好的代码补全、静态分析和文档生成等功能。
    2. 动态类型(Dynamic Typing):
      • 语法: 变量的类型是根据赋值的值自动推断的,无需显式声明类型。

      • 示例:

        name = "John"
        def add(x, y):
            return x + y
        
      • 用途:

        • 简化了代码,使得代码更为灵活,不需要过多的类型声明。
        • 更容易迭代和测试,因为不需要过早地定义所有的类型信息。
        • 适用于较小项目或原型开发,减少了冗余的类型信息。

    不同的运用场景:

    • 类型注解:
      • 适用于大型项目或长期维护的项目,有助于团队成员更好地理解和协作。
      • 在接口和函数签名中提供清晰的类型信息,有助于文档的生成和维护。
      • 对于需要强调规范、接口定义清晰的项目,尤其是在团队协作时。
    • 动态类型:
      • 适用于小型项目、脚本或快速原型开发,可以更灵活地编写代码而无需显式类型声明。
      • 对于一些短期项目或快速迭代的场景,可以减少冗余的类型信息,提高开发效率。
      • 更适合一些需要快速验证想法的情况,不需要花费过多时间在类型注解上。

而这个Python 语言的类型提示系统实际上是Python 增强提案

介绍

Python 增强提案(Python Enhancement Proposal,简称 PEP)是 Python 社区用于提出、讨论和记录新功能、改进或标准的设计文档。PEP 提案通常由 Python 社区的成员提交,经过讨论、修改和投票,最终由 Python 的核心开发者决定是否接受。

PEP 可以包含各种类型的提案,例如新的语言特性、标准库的改进、编码风格规范、进程改进等。PEP 的目标是为 Python 社区提供一个协作的平台,确保对 Python 语言的发展和改进有广泛的参与和透明的决策过程。

PEP 的编号是唯一的标识符,用于标识和检索不同的提案。一些 PEP 提案已经成为 Python 语言的一部分,而另一些可能会在讨论和修改后被拒绝。

有一些常见的 PEP 类型,例如:

  • PEP 8: Python 代码风格指南。
  • PEP 20: Python 的设计哲学,也被称为 "The Zen of Python"。
  • PEP 333: Python Web 应用程序接口(WSGI)规范。
  • PEP 484: Python 类型提示系统。(就是前面讲的)

PEP 提案的文档可以在 Python 的官方网站上找到,提供了详细的信息和讨论,以及提交者的联系方式。

对于详细的PEP 484可以看这篇翻译官方文章的博客:https://www.cnblogs.com/popapa/p/PEP484.html

标签:语言,Python,代码,PEP,提示,int,类型,注解
From: https://www.cnblogs.com/aster-ist/p/17999954

相关文章

  • 详解Python TimedRotatingFileHandler 多进程环境下的问题和解决方法
    详解PythonTimedRotatingFileHandler多进程环境下的问题和解决方法在Python的日志处理模块中,TimedRotatingFileHandler是一个非常有用的类,它可以按时间对日志文件进行轮换。然而,在多进程环境下,TimedRotatingFileHandler可能会出现一些问题。本文将详细介绍这些问题以及可能的解决......
  • 用 Python 实现ChatGPT OpenAI(直接上源码)
    网上一大堆教程,好多讲的很墨迹,你需要折腾半天才能调试通,up这里给大家直接上源码干货。详细教程后面补充,着急使用的可以直接拿走调试说明到openai里面替换你自己的app_keyhttps://platform.openai.com/登录账号登录之后,点击右上角“Personal”,展开菜单,找到“ViewAP......
  • ChatGPT API调用python和脚本实现
    ChatGPT由于其独特、近乎准确且类似人类的响应,如今在互联网上引起了过多的讨论。本文讨论如何通过Python代码连接到ChatGPTAPI。 第1步:获取OpenAIAPI的API密钥要获取OpenAIAPI的API密钥,您需要在OpenAI网站上注册一个OpenAI帐户。拥有帐户后,您可以按......
  • 面向Java开发者的ChatGPT提示词工程(4)明确步骤、GPT自己找解决方案
    在之前的文章中,我们了解到了编写明确具体的指令关键原则的四种策略,它们分别是:使用分隔符清楚地指示输入的不同部分。要求GTP结构化输出。要求GTP检查是否满足条件。写示例时提示词要尽量少一些。接下来,我们将继续了解第二个关键原则:给GPT一定的“思考”时间。给GPT......
  • 基于Python开发ChatGPT应用
    ChatGPT是目前非常热门的一种人工智能模型,它是基于深度学习技术的一种针对自然语言处理的算法。ChatGPT的应用非常广泛,可以应用于聊天机器人、文本生成、翻译、自动化等多个领域。本文将介绍如何使用Python开发一个基于ChatGPT模型的聊天机器人应用。 1.ChatGPT简介......
  • C语言学习5
    define不是关键字,是预处理指令分支循环语句C语言是【结构化】的程序设计语言生活中的万事万物都可以抽象成顺序结构、选择结构、循环结构中的一种或几种的组合写法一翻译:如果表达式为真,则执行语句翻译:如果表达式为真,执行语句1;如果表达式为假,执行语句2如果if后面跟多条语句,要用上大......
  • C语言实现二分法
    现在有一个任务:从一堆有序数字中找出其中一个数字有两种方法1)从头到尾依次寻找2)从该些数字中中间部位比较若小于要找数字则在后半部分否则在前半部分再进行这样的方式进行循环,直至找到或找不到此数字现介绍这样的方法——二分法在计算机科学中,二分搜索(英语:binarysearch),也称折半搜......
  • python网络编程笔记(一)Socket 编程入门
    一:Socket简介套接字起源于20世纪70年代加利福尼亚大学伯克利分校版本的Unix,即人们所说的BSDUnix。因此,有时人们也把套接字称为“伯克利套接字"或"BSD套接字”。一开始,套接字被设计用在同-台主机上多个应用程序之间的通讯BSDSocket接口是TCP/IP网络的API在Linux,Unix和W......
  • python网络编程(二)模拟ssh远程执行命令
    1、项目需求:要实现一个像ssh远程连接工具一样,在终端输入命令,返回对应的结果。比如window的dos命令:dir:查看目录下的文件ipconfig:查看网卡信息tasklist:查看进程列表linux的命令:ls:查看目录下的文件ifconfig:查看网卡信息ps-aux:查看进程列表2、项目分析:这......
  • python网络编程(三)实现文件下载功能
    一:目标:要实现一个客户端从服务端下载文件的功能,这个在模拟ssh远程执行命令的基础上再做修改就可以了二:分析:1、要规定客户端获取文件的格式:下载文件用get文件名,比如要下载服务端的a.txt,就写成geta.txt2、因为我目前是客户端和服务端都是在一台服务器上,我模拟的时候就把......