Python代码智能感知类型标注与特殊注释实例分析

    一、代码智能感知

    想必大部分现代的集成开发环境(IDE)都有代码智能感知功能吧!

    智能感知(IntelliSense),就是在我们写代码的时候,代码编辑器自动弹出我们代码中需要补全的部分,而这些补全的部分就是代码编辑器通过智能感知得到的,最重要的是,代码编辑器智能地感知补全的部分是通过代码中的变量的类型来得到的。

    Python代码智能感知类型标注与特殊注释实例分析

    一般的智能感知

    说了这么多之后,大家一定都清楚智能感知是什么了,但有些时候,代码却没有智能感知(如下)

    Python代码智能感知类型标注与特殊注释实例分析

    智能感知失效

    当代码量很大的时候,代码的智能感知是十分重要的,它可以帮你迅速了解到这个变量那个变量是个什么东西,以减少你生产BUG!

    写一个好的注释(或者类型标注),不仅仅是方便未来复用你代码的人,也是为了自己,实际上,“为了自己”可不只是简单的方便自己了解代码,更多的是让IDE智能地感知到你的代码,IDE理解了你的代码,它就会为你提供对应的信息(如代码补全和提示作用),这对程序员是极其友好的!

    通过了解后面的类型标注特殊的注释,你将解决几乎所有的智能感知失效的问题!

    二、类型标注

    Python的类型标注有几种,在下面我给出我所知道的一些

    函数参数的类型标注 【简单操作】

    def function(num: int, string: str):    pass

    在上面的代码中,函数参数的后面跟了一个冒号和一个类名,代表参数的数据类型,这个类名可以是内置的类,如str、int、float等,也可以是自己定义的类、也可以是模块、库中的类,如tkinter.Tk

    num参数是int类型的,string参数是str类型的,这些类型标注不仅仅在函数被定义的地方可以被看见,在调用该函数的时候也能通过IDE的智能感知而被看见(如下)

    Python代码智能感知类型标注与特殊注释实例分析

    函数参数的类型标注

    这个类型标注之后,并不会强制该参数使用该类型,它只是起提示作用,相当于注释,同时,IDE会通过智能感知该类型标注,给出相应的代码提示

    Python代码智能感知类型标注与特殊注释实例分析

    代码提示作用

    【高级操作】

    import typing def function(num: int,             lis: list[int],             key: typing.Literal[4, 5, 6],             string: str | None = '123'):    pass

    上面的代码中:

    list[int] 的意思是,lis参数的数据类型为一个内含整数数据的列表类型

    typing是一个官方的内置模块,专门用于类型标注,typing.Literal[4, 5, 6] 表示参数key的预期值只能为4或者5或者6,也就是说,该函数接收的key参数,它只希望它是4、5或者6这三个值中的一个

    str | None 的意思是,string参数的数据类型可以为str或者是None类型,此处说明一下,类型标注中用 “|” 代表或者的这种操作是在 Python3.10 的时候才加入的,在之前的版本中,这种用法只在 pyi 文件(Python存根文件)中可以用

    下面的代码提示中,我们就能看到类似于上面的类型标注的作用

    Python代码智能感知类型标注与特殊注释实例分析

    高级操作

    顺便一提,那个省略号(三个连续的小数点)的意思的默认值(一般用于pyi存根文件中)

    函数返回值的类型标注

    def pow(m: int, n: int) -> int:    return m**n

    函数返回值的类型标注类似于上面所说的参数类型标注,只不过这里标注的类型只的是函数的返回值的数据类型,同样的,只起提示作用,没有强制效果

    这个标注也有高级用法,与上面的完全,一样,此处不再赘述

    顺便一提,list[int, int, int] 表示一个含有三个整数数据的列表类型

    变量的类型标注

    传言有一种从天而降的写法,不知大家见过没有

    key: intkey = 3 """或者这样写:key: int = 3""" print(key) # 输出3

    这个变量名后面加一个冒号、再加一个类名的写法也是类型标注的一种,只不过它不是函数的参数,而是一般变量而已,用法同上

    那么,这个类型标注有什么用呢?直接赋值给该变量一个列表,那么IDE不也能识别它么?

    这对于一般的变量确实没啥用,但是,下面的这种操作,你可看好了

    Python代码智能感知类型标注与特殊注释实例分析

    变量的类型标注

    上面的这种情况,当变量没有提前做好类型标注时,后面写代码就因为没有IDE的提示而极其麻烦

    变量的类型标注还有一种方法,将在后面的 特殊的注释 中讲到

    三、特殊的注释

    一段看似普通的注释,实际也有着特殊的作用,就像C#中的特殊注释一样(三条斜杠“///”),Python也有着它特殊的注释

    【三引号注释】

    想必一个合格的Python程序员,都知道三引号注释的特殊作用吧

    它不仅仅是一段普通的注释,它可以换行(都知道的),它写在函数和类下面表示帮助文档等等……这里就不再赘述了

    【特殊的 # 注释】

    它只能单行注释……除此之外难道它还有别的特性???对!别的特性!

    当 # 注释以这样一种格式写的时候,它有着和类型标注同样的效果!!!

    key = [] # type: list[float]

    # 注释后面写上 type,再加一个冒号、然后加上数据类型,它就成了类型标注!!!

    Python代码智能感知类型标注与特殊注释实例分析

    特殊的 # 注释

    是不是大多数人都不知道这个特性呢?

    四、特殊的类型

    有一些比较特别的数据类型,有些不是内置的但又算是内置的,但你又不容易找到它,比如迭代器类型、生成器类型、函数类型(Python里函数实际也是个对象,也有类型)等等,下面给出一个表格方便大家进行类型的标注

    类型名称 数据类型 引用方式
    函数 function

    function

    types.FunctionType

    方法 method

    types.MethodType

    迭代器 Iterator

    typing.Iterator

    collections.abc.Iterator

    生成器 Generator

    typing.Generator

    collections.abc.Generator

    序列 Sequence

    typing.Sequence

    collections.abc.Sequence

    到此,关于“Python代码智能感知类型标注与特殊注释实例分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

    文章标题:Python代码智能感知类型标注与特殊注释实例分析,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/29026

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    亿速云的头像亿速云认证作者
    上一篇 2022年9月22日 下午10:19
    下一篇 2022年9月22日 下午10:21

    相关推荐

    • 如何进行XXL-JOB API接口未授权访问RCE漏洞复现

      XXL-JOB描述 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 一、 漏洞详情 此次漏洞核心问题是 GLUE 模式。XXL-JOB 通过“GLUE模式”支持多语言以及脚本任务,该模式任务特点如下…

      2022年9月8日
      2.5K00
    • windows7操作系统有哪些版本

      windows7操作系统分为六个版本:1、Starter版本,只通过OEM计算机预装;2、HomeBasic版本,是win7经过简化的一种版本;3、HomePremium版本,能够给家庭用户提供更多的需求;4、Professional版,支持演示模式、加强的网络功能等等;5、Enterprise版本…

      2022年9月15日
      1.1K00
    • css中translate的含义是什么

      translate的意思为“移动”,是css内置的一个函数,与transform属性配合使用,可以将元素沿着水平方向(X轴)和垂直方向(Y轴)移动。translate的使用分为3种情况:1、“translateX(x)”,元素仅在水平方向移动;2、“translateY(y)”,元素仅在垂直方向移动…

      2022年9月22日
      1.2K00
    • mysql远程连接不上怎么解决

      解决方法:1、利用“select host,user from user;”查看root用户的可连接权限主机范围;2、利用“update user set host=‘%’ where user=‘root’;”修改root用户的修改权限的主机范围是任一主机;3、利用“systemctl resta…

      2022年9月16日
      1.7K00
    • windows bios设置u盘启动没有u盘选项如何解决

      解决方法: 1、启动盘制作完成之后,可以在开机的页面中按启动热键F8进入“bios”。 2、在这里可以找到usb高级设置的选项,将其状态改为启动,右侧类型改为“enabled”。 3、设置完成没有找到usb选项的话可以切换至boot,点击图中所指进入设置。 4、在这里你可以看到光标的位置,启动优选的…

      2022年9月22日
      92300
    • MySQL中一条SQL是怎么执行的

      大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 Server层 主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数 (如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。…

      2022年9月18日
      85600
    • 管理事业单位和行政机关有啥具体区别

      管理事业单位和行政机关的具体区别在性质和法律地位、组织目标、组织结构和管理方式、财务状况和资金来源、绩效评估和监督机制等方面。详细介绍:1、性质和法律地位,管理事业单位是指由国家机关、地方政府或其他法定机构委托或授权管理的、具有独立法人地位的非营利性组织,在法律上独立于政府,有自己的法人资格,享有相应的权益和责任,而行政机关是政府的一部分,属于行政机构的一种等等。

      2023年10月19日
      49300
    • windows驱动精灵dx如何修复

      驱动精灵dx修复方法: 1、打开驱动精灵点击“百宝箱”。 2、点击右下方的“软件管理”。 3、在搜索栏中输入“Directx”。 4、找到“Directx 修复工具”点击“安装”即可。 感谢各位的阅读,以上就是“windows驱动精灵dx如何修复”的内容了,经过本文的学习后,相信大家对windows…

      2022年9月10日
      61000
    • windows ecshop模板如何修改

      ecshop模板修改方法: 1、首先我们下载一个模板,将他放入软件目录下的“themes”文件夹。 2、接着打开ecshop,点击“模板管理”下的“模板选择” 3、然后点击下方你要更换的模板。(建议备份当前模板) 4、网站会弹出提示,如图所示,点击“确定” 5、修改完成后去到网站,就可以发现模板已经…

      2022年9月22日
      47700
    • php进程通信之信号量的用途是什么

      常见进程通信方式 一些理论基础 临界资源:每次仅允许一个进程访问的资源。 临界区:每个进程中访问临界资源的那段代码叫临界区 所谓临界区(也称为临界段)就是访问和操作共享数据的代码段。 进程互斥:两个或以上的进程不能同时进入关于同一组共享变量的临界区域,即一个进程正在访问临界资源,另一个进程要想访问必…

      2022年9月2日
      52800
    注册PingCode 在线客服
    站长微信
    站长微信
    电话联系

    400-800-1024

    工作日9:30-21:00在线

    分享本页
    返回顶部