前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >python静态类型检查工具mypy

python静态类型检查工具mypy

作者头像
zy010101
发布于 2022-05-05 08:11:01
发布于 2022-05-05 08:11:01
91600
代码可运行
举报
文章被收录于专栏:程序员程序员
运行总次数:0
代码可运行

mypy介绍

mypy 是 Python 的一个可选静态类型检查器,旨在结合动态(或“鸭子”)类型和静态类型的优点。mypy 将 Python 的表达能力和便利性与强大的类型系统和编译时类型检查相结合。mypy 类型检查标准 Python 程序;使用任何 Python VM 运行它们,基本上没有运行时开销。

安装和使用

mypy需要python3.6+,然后使用pip直接安装即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip3 install mypy

接下来就可以直接在使用mypy了,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mypy type_annotations.py

就可以实现对代码进行静态类型检查,但是前提是你的代码使用了类型注解,否则mypy什么也检查不出来。mypy检查的结果是基于类型注解的,这意味你可以忽略mypy所提示的错误,只把它当做警告。

默认情况下,mypy不会对动态类型函数进行类型检查。例如下面的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def add(a:int, b:int) -> int:
    "整数相加"
    return a + b

add(1, 2)           # 静态类型检查通过
add("123", "qwe")   # 静态类型检查失败

使用mypy进行静态类型检查,结果如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
test.py:17: error: Argument 1 to "add" has incompatible type "str"; expected "int"
test.py:17: error: Argument 2 to "add" has incompatible type "str"; expected "int"
Found 2 errors in 1 file (checked 1 source file)

mypy给出了错误提示,但是我们都知道add("123", "qwe")这行代码并不会出错,这就是Python的鸭子类型。如果我们想要上面的代码通过静态类型检查,可以有两种方式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from typing import Any
def add(a:Any, b:Any) -> Any:
    return a + b

add(1, 2) 
add("123", "qwe") 

另外一种方式是告知mypv忽略此处的类型检查。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def add(a:int, b:int) -> int:
    return a + b

add(1, 2) 
add("123", "qwe")   # type: ignore

使用# type: ignore可以让mypy忽略对代码的静态类型检查。 目前,mypy依旧处于beta版本。关于mypy的更多信息,可以查看mypy.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
让你的 Python 静态起来
在我们的预想里,上述代码应该会输出 LeviathanAxe is ready,但实际运行则会报错:AttributeError: 'tuple' object has no attribute 'items'
布鲁斯鱼
2022/11/02
1K0
让你的 Python 静态起来
Python 静态类型检查入门
我写的代码主要是偏量化交易,这行啊对数值的准确性要求是非常的高,毕竟交易的都是真金白银。但是计算机有时候“不靠谱”,比如 0.2 * 100 用眼睛看一下都知道结果是 20 ;用计算机来算结果就不一定了,先算个 19.99xxx 的给大家看下。
初代庄主
2024/04/22
1180
Python 静态类型检查入门
使用 Mypy 检查 30 万行 Python 代码,总结出 3 大痛点与 6 个技巧!
英文:Using Mypy in production at Spring (https://notes.crmarsh.com/using-mypy-in-production-at-spring)
Python猫
2022/09/05
9580
简单聊聊Python的类型系统
这篇文章实际是The Ultimate Guide to Python Type Checking文的导读和个人理解,有不当之处,以原文为准。内容分为四个部分:
哒呵呵
2019/01/23
1.3K0
​Python 3 新特性:类型注解
我们知道 Python 是一种动态语言,变量以及函数的参数是不区分类型。因此我们定义函数只需要这样写就可以了:
Crossin先生
2018/07/24
1.3K0
​Python 3 新特性:类型注解
Python3标准库漫游之Typing.overload
Python3 >= 3.5 Python3.5开始Python把Typing作为标准库引入,低版本可以使用独立的Typing包
the5fire
2019/03/01
2.1K0
【Python】动态与静态的较量:深入探讨Python的动态类型机制与类型提示的应用
Python的动态类型系统是其灵活性和广泛适用性的重要因素,但在大型项目中,类型安全问题也可能带来隐患和复杂性。本文深入解析Python的动态类型机制,探讨类型提示(type hints)如何改善代码的可读性与可维护性,并详细介绍静态类型检查工具——mypy。在大量示例代码中,我们将展示如何通过类型提示减少错误,提升开发效率,确保项目在开发过程中的安全性与稳定性。同时,本文将通过代码片段与中文注释,帮助读者理解如何在Python项目中使用mypy实现动态与静态类型的平衡。这种结合不仅能够减少运行时错误,还能提升团队协作和代码可读性,使Python在大型项目中更具优势。让我们一同探索如何在Python的动态类型世界中,以更“静态”的方式实现灵活与安全的结合。
蒙娜丽宁
2025/01/01
1131
【Python】动态与静态的较量:深入探讨Python的动态类型机制与类型提示的应用
深入理解 Python 的类型提示
然而,关于他们究竟是什么(在本文中,我暂且称他们为提示)、他们会如何使你的代码受益,仍然有许多让人困惑不解的地方。
程序员小新
2022/01/04
1.2K0
使用 mypy 做 type check
前言 完残!?,最近看之前写的 Python 代码老得琢磨这比变量的类型是啥(Python 无类型系统xxx),不愧是我写的! 看段之前写的实现迭代器模式的代码: # 抽象迭代器类 class Ite
Cloud-Cloudys
2020/07/06
6060
【python】python指南(五):静态类型注解之List
在Python 3.5版本后引入的typing模块为Python的静态类型注解提供了支持,这个模块在增强代码可读性和维护性方面提供了帮助,今天简要概述一下List
LDG_AGI
2024/08/13
1010
流畅的 Python 第二版(GPT 重译)(七)
面向对象编程关乎接口。在 Python 中理解类型的最佳方法是了解它提供的方法——即其接口——如 “类型由支持的操作定义”(第八章)中所讨论的。
ApacheCN_飞龙
2024/03/21
2270
流畅的 Python 第二版(GPT 重译)(七)
python类型检测最终指南--Typing的使用
原文链接:https://realpython.com/python-type-checking/
用户1564362
2019/11/12
5.1K0
python类型检测最终指南--Typing的使用
可维护的Python代码库的7条规则
Python是一种出色的编程语言。凭借其易读的语法和庞大的库生态系统,Python可用于构建从小型脚本到机器学习项目再到生产级网络平台的任何内容。对于编程新手来说,Python很容易成为他们的第一门语言,而对于经验丰富的老手来说,Python的强大功能足以提高他们的工作效率。
数据STUDIO
2023/09/04
3360
可维护的Python代码库的7条规则
流畅的 Python 第二版(GPT 重译)(四)
Python 中的函数是一等对象。编程语言研究人员将“一等对象”定义为一个程序实体,可以:
ApacheCN_飞龙
2024/03/21
4340
流畅的 Python 第二版(GPT 重译)(四)
干货 | 推荐一整套 Python 开发工具
原文:https://sourcery.ai/blog/python-best-practices/
Python数据科学
2019/09/08
1.3K0
流畅的 Python 第二版(GPT 重译)(八)
本章是第八章的续集,涵盖了更多关于 Python 渐进类型系统的内容。主要议题包括:
ApacheCN_飞龙
2024/03/21
2910
流畅的 Python 第二版(GPT 重译)(八)
Python 进阶指南(编程轻松进阶):十一、注释、文档字符串和类型提示
注释、文档字符串和类型提示帮助你保持代码的可读性。注释是简单明了的简短解释,你直接写在源代码中,计算机会忽略它们。注释为那些没有编写代码的人提供了有用的注释、警告和提醒,或者有时甚至为将来代码的程序员提供了帮助。几乎每个程序员都问过自己,“谁写了这些不可读的东西?”却发现答案是,“我做的。”
ApacheCN_飞龙
2023/04/09
9850
Python 进阶指南(编程轻松进阶):十一、注释、文档字符串和类型提示
用 Type Annotation 提升 Python 代码健壮性
花下猫语:众所周知,Python 是一门动态类型语言,这也是造成它性能较慢的一大原因。如今 Python 也引入了一些类型检查的辅助,那么,类型检查对于提升 Python 代码健壮性,有没有帮助呢?(既然这么问了,那肯定是有的……)
Python猫
2019/08/12
1.6K0
用 Type Annotation 提升 Python 代码健壮性
爬虫(108)Python 3.8的超酷新功能(接近一万字,请耐心享用,而且建议收藏)
在Python中的最新版本发布!自夏季以来,Python 3.8已在beta版本中可用,但在2019年10月14日,第一个正式版本已准备就绪。现在,我们所有人都可以开始使用新功能并从最新改进中受益。
公众号---人生代码
2020/05/18
2.7K0
爬虫(108)Python 3.8的超酷新功能(接近一万字,请耐心享用,而且建议收藏)
【python】python指南(九):静态类型注解之Any
在Python 3.5版本后引入的typing模块为Python的静态类型注解提供了支持,这个模块在增强代码可读性和维护性方面提供了帮助,今天简要概述一下Any。
LDG_AGI
2024/08/13
2130
【python】python指南(九):静态类型注解之Any
推荐阅读
相关推荐
让你的 Python 静态起来
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档