美文网首页
使用Python3新特性类型注解提高代码可读性

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

作者: 画星星高手 | 来源:发表于2018-10-16 17:48 被阅读171次

    先看代码

    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")
    

    About


    了解更多有趣的操作请关注我的微信公众号:DealiAxy
    每一篇文章都在我的博客有收录:blog.deali.cn

    相关文章

      网友评论

          本文标题:使用Python3新特性类型注解提高代码可读性

          本文链接:https://www.haomeiwen.com/subject/xdnhzftx.html