​Python 3 新特性:类型注解

前几天有同学问到,这个写法是什么意思:

def add(x:int, y:int) -> int:    return x + y

我们知道 Python 是一种动态语言,变量以及函数的参数是不区分类。因此我们定义函数只需要这样写就可以了:

def add(x, y):    return x + y

这样的好处是有极大的灵活性,但坏处就是对于别人代码,无法一眼判断出参数的类型,IDE 也无法给出正确的提示。

于是 Python 3 提供了一个新的特性:
函数注解

也就是文章开头的这个例子:

def add(x:int, y:int) -> int:    return x + y

: 类型 的形式指定函数的参数类型,用 -> 类型 的形式指定函数的返回值类型。

然后特别要强调的是,Python 解释器并不会因为这些注解而提供额外的校验,没有任何的类型检查工作。也就是说,这些类型注解加不加,对你的代码来说没有任何影响

输出:

但这么做的好处是:

  1. 让别的程序员看得更明白

  2. 让 IDE 了解类型,从而提供更准确的代码提示、补全和语法检查(包括类型检查,可以看到 str 和 float 类型的参数被高亮提示)

在函数的 __annotations__ 属性中会有你设定的注解:

输出:

在 Python 3.6 中,又引入了对变量类型进行注解的方法:

a: int = 123
b: str = 'hello'

更进一步,如果你需要指明一个全部由整数组成的列表:

from typing import List l: List[int] = [1, 2, 3]

但同样,这些仅仅是“注解”,不会对代码产生任何影响。

不过,你可以通过 mypy 库来检验最终代码是否符合注解。

安装 mypy:

pip install mypy

执行代码:

mypy test.py

如果类型都符合,则不会有任何输出,否则就会给出类似输出:

这些新特性也许你并不会在代码中使用,不过当你在别人的代码中看到时,请按照对方的约定进行赋值或调用。

当然,也不排除 Python 以后的版本把类型检查做到解释器里,谁知道呢。

(0)

相关推荐

  • 一文解决现代编程语言选择困难:命令式编程

    本文转载自 InfoQ,作者:Ilya Suzdalnitski 翻译:盖磊 如何了解某种编程语言的优缺点?某种编程语言是否适用于我的项目?面对此类问题,如果求助于搜索引擎,输入"最佳编程语 ...

  • typing库:让你的代码阅读者再也不用猜猜猜

    Python以其简洁的代码而闻名于世.除了缩进之外,代码样式和文档主要取决于编写应用程序的开发人员的习惯,这可能导致一些混乱,产生难以理解的代码.而这主要是因为Python是一种动态类型语言,请看以下 ...

  • pyannotate-自动生成PEP-484注释的python库

    对于静态检查Python代码,mypy很棒,但是只有在将类型注释添加到代码库后,它才有效.当您拥有大型代码库时,这可能会很痛苦.在Dropbox,我们注释了超过120万行代码(约占我们Python代码 ...

  • 微软推出的 Pylance,随着 VS Code 的更新,性能又前进了一步

    来自机器之心 微软推出的 VS Code Python 语言插件 Pylance,给 Python 带来编译语言般的开发支持.对于最近更新的 VS Code 版本,除了保留 Pylance 原始特性外 ...

  • mypy-在编译期间检查变量类型的python库

    Mypy是Python 3和Python 2.7的静态类型检查器.如果您在代码中添加类型注释,mypy可以键入检查代码并查找常见的错误.由于mypy是静态分析器或类似lint的工具,因此类型注释仅是m ...

  • Go语言和Python哪一个更容易学呢?

    作者:大众才子2019-11-07 15:24 Python和Go都是用于编写Web应用程序的强大的高级编程语言,它们之间有什么区别吗?下面本篇文章就来带大家认识一下Python和Go语言,介绍一下P ...

  • MonkeyType-通过收集运行时类型生成静态类型注释的python库

    MonkeyType收集函数参数和返回值的运行时类型,并可以基于运行时收集的类型自动生成存根文件,甚至可以将草稿类型注释直接添加到Python代码中. 可读性和静态分析是向代码添加类型注释的主要动机. ...

  • Python 3.9来了!这十个新特性值得关注

    近日,Python 3.9 发布,并开发了一些新特性,包括字典合并与更新.新的解析器.新的字符串函数等. Python 3.9 已于 10 月 5 日发布,新版本的特性,你 get 到了吗?对于 Py ...

  • cad2022好用吗?cad2022新特性 AutoCAD LT 2022 for Mac最新版

    AutoCAD2022中文版是Autodesk公司的一款专业CAD绘图软件,aAutoCAD mac版可用于建筑设计.机械设计.电气设计.工程制图等各种行业! 全新功能 探索AutoCADLT®202 ...

  • golang1.16新特性速览

    今天是假期最后一天,明天起大家也要陆续复工了.golang1.16也在今天正式发布了. 原定计划是2月1号年前发布的,不过迟到也是golang的老传统了,正好也趁着最后的假期快速预览一下golang1 ...

  • Oracle 19.8新特性"asmcmd credverify" and "asmcmd credfix"

    平台:Redhat Linux 7.6 数据库版本:Oracle 19.10 问题描述:进行OCR磁盘替换DD破坏实验,并删除原有的OCR磁盘组.中间过程中,因spfile文件以及asm密码文件没有进 ...

  • 安卓12重磅新特性曝光:国产流氓APP将被彻底终结?

    不同于早些年,现在的智能手机系统基本上除了苹果的iOS,就是安卓了.安卓系统从第一代走到今天已经来到了第十二个版本,相比早期的安卓系统,现在的安卓系统越来越完善,在流畅度和安全性上也越发看齐苹果iOS ...

  • 带你了解C#每个版本新特性

    上学时学习C#和.NET,当时网上的资源不像现在这样丰富,所以去电脑城买了张盗版的VS2005的光盘,安装时才发现是VS2003,当时有一种被坑的感觉,但也正是如此,让我有了一个完整的.NET的学习生 ...

  • 解读HTTP/2与HTTP/3 的新特性

    前端技术优选 今天 以下文章来源于前端工匠 ,作者浪里行舟君 前言 HTTP/2 相比于 HTTP/1.1,可以说是大幅度提高了网页的性能,只需要升级到该协议就可以减少很多之前需要做的性能优化工作,当 ...

  • MySQL8.0新特性

    MySQL从5.7一跃直接到8.0,这其中的缘由,咱就不关心那么多了,有兴趣的朋友自行百度,本次的版本更新,在功能上主要有以下6点: 账户与安全 优化器索引 通用表表达式 窗口函数 InnoDB 增强 ...

  • Python异常处理和异常类型

    python2.x捕获异常语法: try: ...some functions...except Exception, e: print(e) python3.x捕获异常语法: try: ...som ...