返回文章列表文章索引阅读全文
STARBLOG / 阅读手记
Python

使用Python3新特性类型注解提高代码可读性

先看代码 def add(x: int, y: int) - int: return x + y 没用过类型注解(Type Annotations)的同学可能咋一看有点迷糊,其实上面这段代码和下面这个代码是一样的。 def add(x, y): return x + y 类型注解介绍 我们知道 Python 是一种动态语言,变量以及函数的参数是不区分类型。 Python解释器会在运

曦远 (DealiAxy)约 4 分钟
目录4 个章节

先看代码

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

没用过类型注解(Type Annotations)的同学可能咋一看有点迷糊,其实上面这段代码和下面这个代码是一样的。

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

类型注解介绍

我们知道 Python 是一种动态语言,变量以及函数的参数是不区分类型。 Python解释器会在运行的时候动态判断变量和参数的类型,这样的好处是编写代码速度很快,很灵活,但是坏处也很明显,不好维护,可能代码写过一段时间重新看就很难理解了,因为那些变量、参数、函数返回值的类型,全都给忘记了。 而且当你在读别人的代码的时候,也无法一眼看出变量或者参数的类型,经常要自己推敲,这样给学习带来了很大的障碍。

所以Python3里有了这个新特性,可以给参数、函数返回值和变量的类型加上注解,不过这个仅仅是注释而已,对代码的运行来说没有任何影响,变量的真正类型还是会有Python解释器来确定,你所做的只是在提高代码的可读性,仅此而已。

看代码

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


def area_calculation(radius: float) -> float:
    # 变量类型注解需要 py3.6 以上版本
    # Var Type Annotations need python 3.6 and later
    pi: float = 3.1415926
    return radius * radius * pi


if __name__ == '__main__':
    print(add(1, 2))
    print(add.__annotations__)
    print(area_calculation(2))
    print(area_calculation.__annotations__)

运行结果:

3
{'x': <class 'int'>, 'y': <class 'int'>, 'return': <class 'int'>}
12.5663704
{'radius': <class 'float'>, 'return': <class 'float'>}

这里调用了函数的__annotations__属性,通过这个属性可以看到参数和返回值类型的注解。

测试注解的正确性

前面说了,这个注解仅仅起到了注释的作用,不会影响代码的执行,所以即使你类型注解写错了,程序运行的时候还是会按照正确的类型去运行。 然后,Python提供了一个工具方便我们测试代码里的类型注解正确性,mypy

首先安装:

pip install mypy

使用测试:

mypy filename.py

如果没有错误则没有输出,如果有错误则会有相应输出,如

$ mypy demo.py
demo.py:14: error: Incompatible return value type (got "float", expected "int")

_EOF_

使用Python3新特性类型注解提高代码可读性

本文作者:
程序设计实验室
版权声明:
本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

相关文章

Python接入企业微信推送信息到内部群里

前言 之前一篇文章提到了使用wechatpy库来实现企业微信应用登录:Django + Taro 前后端分离项目实现企业微信登录 其实这个库可以实现的功能非常多,基本微信开发涉及到的功能都能实现。 本文介绍一个很常用的场景:实时推送信息到企业微信群里。 安装 首先安装wechatpy库 pip install wechatpy 如果运行的时候提示需要安装其他库(比如加解密相关的)那就按照提示安装,

2022-04-08 · Python · 约 1 分钟

使用Python+FFMPEG实现视频分割与合并

前言 日常中偶尔会遇到需要简单剪辑处理视频的场景,以前我可能会拿出PR来剪辑一下,(别跟我说国产那些软件,剪辑完视频强制加上广告片头片尾恶心的一批),但是PR毕竟太重量级,剪个简单的视频都要花不少时间,直到我发现了FFmpeg…… 这个FFmpeg真的是神器,免费开源功能强大,好像很多软件都是基于这个开发的,它本身提供了命令行接口就已经能满足我们日常的简单视频处理需求,我用来简单处理视频分割、合并

2022-05-27 · Python · 约 1 分钟

编写爬虫自动下载王者荣耀官网上好看的壁纸

前言 偶然间发现王者荣耀的官网上发布了这么多好看的壁纸。 地址:http://pvp.qq.com/web201605/wallpaper.shtml 看了一下,每一张都挺喜欢的,而且还有十多页,一张一张去慢慢下载肯定不是作为一个Geeker的正确姿势。 由于最近python用得比较多,所以看到什么好玩的就想爬虫下载下来,所以看到这么多好看图片,我又“熟练”地掏出了python。 分析 这个网站长

2021-12-18 · Python · 约 1 分钟

讨论

共 0 条

良言一句三冬暖,恶语伤人六月寒。

加载评论中…