纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

Python添加类型标注 浅谈怎么给Python添加类型标注

枇杷鹭   2021-06-08 我要评论
想了解浅谈怎么给Python添加类型标注的相关内容吗枇杷鹭在本文为您仔细讲解Python添加类型标注的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Python添加类型标注,Python类型标注下面大家一起来学习吧

Python 添加类型标注

Python 如此简洁书写者在声明变量时甚至无需考虑类型

但是简洁与复杂间是存在一个平衡点的当我们书写较为复杂的项目时还是希望可以拥有「静态类型语言」强大的类型检查和智能的提示

好消息是并不需要像 TypeScript 那样引入一个新的编译器来给 JavaScript 做“升级”来进行类型检查 Python 自带的 typing 工具可以在一定程度上把 Python 变成「静态类型语言」坏消息是 Python 归根结底不是「静态类型语言」经过我的简单测试其代码还是「自由松散」的

给 Python 标注类型

首先和读者声明我们的实验环境

❯ python --version
Python 3.7.0

本文参考了 Python3.7 的 中文文档 

我们声明一个变量通过如下方式声明类型:

a: int = 1
b: float = .2
print(f'{a}, {b}')  # 1, 0.2

遗憾的是在 Python 中a: int = 1 这句话并没什么意义说的直白点就是『脱裤子放屁』再说得好听点 Python 的类型标注放在这里这么用完全没有必要

首先 a = 1 中解释器会自动把 a 推断为 int 类型诸如 Pylance 的 Language Server 也会在我们书写时提供 int 的方法补全

此外就算我们把 a 的类型规定为 int 然后将 str 赋给 a 解释器和 Language Server 也完全不会报错如下

a: int
a = '1'
print(a)  # 非常迷

做上述类型检查对于现代编译技术而言应该是毫无难度的但这里就是没有报错、没有警告这大概与 Python 的设计哲学有关

我们看看 TypeScript 是如何表现的:

TypeScript 把自己当作静态类型语言要求书写时就确保类型的正确性

使用 typing

尽管 Python 并不强制要求类型的正确性并且会自动帮我们做强类型转换但是我们依旧可以享受类型标注带来的诸多便利

比如我们现在要定义一个函数 foo 函数返回一个列表 dogList 列表中的元素都是我们自定义的类 Dog 的实例

如果没有类型标注我们无法获得智能提示如下

Python 中从来就不要求 List 对象中的元素都是同一类型因此解释器或者 Language Server 也不会「吃力不讨好」般地去把程序运行一遍然后推断你这个 List 里放的东西是什么类型

自然当你从 List 中拿元素时(比如上述的 dogList[0] )它没法告诉你 List 中你拿的元素是什么类型也就没办法提示(No suggestion.)

这与实际业务场景不符因为我们写代码时在一个列表中装入的往往都是同一类型 为了在取元素时获得补全提示我们可以使用 typing.List + 极简的泛型 如下

我们规定 foo 返回的元素必是一个 List 且其中元素类型是 Dog 类型然后我们的 dogList[0] 也被识别成了 Dog 类型获得了补全舒服

题外话:聪明的 Pylance

其实 Pylance 自己也可以做一些类型推导比如我们使用生成器生成列表时 Pylance 就会判断这个列表中元素属于什么类型:

结语

关于 typing 的用法还有很多内容可以讨论我的参考资料主要是:Python3.7 的 typing中文文档 此外用 Python 泛型实现函数重载相比静态类型语言似乎十分麻烦(我参考了Python实用宝典的文章(知乎))如果之后我遇到合适的场景也会成文分享


相关文章

猜您喜欢

  • shell脚本处理文本 关于使用shell脚本循环处理文本的问题

    想了解关于使用shell脚本循环处理文本的问题的相关内容吗张理坤在本文为您仔细讲解shell脚本处理文本的相关知识和一些Code实例欢迎阅读和指正我们先划重点:shell脚本处理文本,shell脚本循环处理文本下面大家一起来学习吧..
  • C语言操作树莓派GPIO 使用C语言操作树莓派GPIO的详细步骤

    想了解使用C语言操作树莓派GPIO的详细步骤的相关内容吗波雅_汉库克在本文为您仔细讲解C语言操作树莓派GPIO的相关知识和一些Code实例欢迎阅读和指正我们先划重点:C语言操作树莓派GPIO,C语言树莓派GPIO下面大家一起来学习吧..

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式