温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python如何添加类型标注

发布时间:2021-06-14 11:10:31 来源:亿速云 阅读:574 作者:小新 栏目:编程语言

小编给大家分享一下Python如何添加类型标注,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

给 Python 标注类型

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

❯ python --version Python 3.7.0

本文参考了 Python3.7 的 中文文档[1] 。

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

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  的方法补全。

Python如何添加类型标注

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

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

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

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

Python如何添加类型标注

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

使用 typing

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

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

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

Python如何添加类型标注

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

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

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

Python如何添加类型标注

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

题外话:聪明的 Pylance

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

Python如何添加类型标注

以上是“Python如何添加类型标注”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI