11.5K Star,一个开源的 Python 静态类型检查库

Python学习与数据挖掘 2021-10-29 12:56:22
Python 开源 一个 star 11.5k

Mypy 是 Python 的静态类型检查库,可以向 Python 程序添加类型注解,并用 mypy 对它们进行静态类型检查,无需运行代码即可发现程序中潜在的错误。还可以加入到 git hook 中,实现在提交代码前自动检查。Mypy 具有强大且易于使用的类型系统,具有现代功能,如类型推断、泛型、可调用类型、元组类型、联合类型和结构子类型。

使用 Python 3 注解语法(PEP 484 和 PEP 526)或 Python 2 基于注释的注解,能够有效的注释代码并使用 mypy 检查代码中的常见错误。

可以在程序中混合使用动态类型和静态类型,对于遗留代码,如果不方便使用静态类型,可以随时回退到动态类型。如:

from typing import Iterator
def fib(n: int) -> Iterator[int]:
a, b = 0, 1
while a < n:
yield a
a, b = b, a + b

对于 Python 2.7,标准注解写成注释:

def is_palindrome(s):
# type: (str) -> bool
return s == s[::-1]

项目地址:

https://github.com/python/mypy

快速开始

使用 pip 进行安装:

$ python3 -m pip install -U mypy

如果要运行最新版本的代码,可以从 git 进行安装:

$ python3 -m pip install -U git+git://github.com/python/mypy.git

安装完成后,可以使用以下命令对应用程序的静态类型进行类型检查:

$ mypy PROGRAM

运行测试的基本方法:

$ pip3 install -r test-requirements.txt
$ python2 -m pip install -U typing
$ ./runtests.py

IDE 集成

  • Vim
  1. 使用 Syntastic:在 ~/.vimrc 添加 let g:syntastic_python_checkers=[‘mypy’]

  2. 使用 ALE:在 ~/vim/ftplugin/python.vim 中添加配置明确启用,let b:ale_linters = [‘mypy’]

  • Emas,使用Flycheck和Flycheck-mypy

  • Sublime Text,使用 SublimeLinter-contrib-mypy

  • Autom,使用 linter-mypy

  • PyCharm,使用 mypy 插件

  • VS Code,已提供对 mypy 的集成

  • 可以加入到 git hook 中,实现在提交代码前自动检查

常用命令

对指定内容进行检查

$ mypy foo.py bar.py some_directory

该命令是递归检查的,会检查目录下对应的所有指定文件。Mypy 还允许以其他方式检查指定代码:

-m MODULE, --module MODULE: 对提供的模块进行类型检查,不会递归地检查
-p PACKAGE, --package PACKAGE: 对提供的包进行类型检查,会递归检查
-c PROGRAM_TEXT, --command PROGRAM_TEXT:将提供的字符串作为程序进行检查
--exclude:递归发现要检查的文件时忽略指定的文件名、目录名和路径

配置文件

--config-file CONFIG_FILE:从给定文件读取配置。覆盖 mypy 的内置默认值

无类型定义和调用

--disallow-untyped-calls:有类型注解的函数调用没有注解定义的函数时报告错误
--disallow-untyped-defs,没有类型注解的函数定义时报告错误
--disallow-incomplete-defs,遇到部分注解不完整的函数定义时报告错误
--disallow-untyped-decorators,带有类型注解的函数用没有注解的装饰器装饰时报告错误

配置错误信息

--show-error-context:在所有错误之前带有解释错误上下文的消息
--show-column-numbers:显示行号
--show-error-codes:显示错误码
--pretty:格式化错误消息,自动换行、显示源代码片段和显示错误位置标记等
--show-absolute-path:显示文件的绝对路径

错误信息生成

--any-exprs-report DIR:在指定目录中生成一个文本文件报告
--cobertura-xml-report DIR:在指定目录中生成 Cobertura XML 类型检查报告,必须安装 lxml 库才能生成此报告
--html-report / --xslt-html-report DIR:在指定目录中生成 HTML 类型检查报告,必须安装 lxml 库才能生成此报告
--lineprecision-report DIR:在指定目录中生成一个纯文本文件报告,其中包含每个模块的类型检查行数等统计信息

技术交流

欢迎转载、收藏、有所收获点赞支持一下!

在这里插入图片描述

目前开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

  • 方式①、发送如下图片至微信,长按识别,后台回复:加群;
  • 方式②、添加微信号:dkl88191,备注:来自CSDN
  • 方式③、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

长按关注

版权声明
本文为[Python学习与数据挖掘]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_38037405/article/details/121024215

  1. Python crawler selenium framework. You can start with these five questions | Python skill tree
  2. It is said that Python is omnipotent. It's really good to see Liyang photography circle with Python this time
  3. 【Python 爬虫】 4、爬虫基本原理
  4. 【Python 爬蟲】 4、爬蟲基本原理
  5. 【 Python crawler】 4. Principes de base du crawler
  6. 这道python题到底应该要怎么做
  7. Que doit faire exactement ce problème Python
  8. Après l'importation des variables du module Python, les valeurs imprimées sont fixes.
  9. Nouveau singe Muzi Lee: 0 cours de formation Python de base types de hachage pour les opérations Python redis
  10. Looking at problems from a fresh perspective: analyzing selenium principle from the perspective of Python
  11. Insérez le format de date dans la base de données MySQL en python et ne l'exécutez pas.
  12. Try Python 3.10 with CONDA
  13. Répondez en python et demandez à quelqu'un de vous aider.
  14. Un simple problème de travail Python, qui ne fonctionne pas
  15. Problèmes d'écriture Python pour la boucle
  16. Comment Python exécute les commandes du programme à plusieurs reprises au lieu de quitter
  17. YYDS! Dexplot: one line of Python code to easily draw statistical charts!
  18. pandas生成的透视表如何和源数据一起保存
  19. pandas生成的透視錶如何和源數據一起保存
  20. Comment sauvegarder le tableau pivot généré par pandas avec les données sources
  21. 10 fois plus efficace avec cache dans le développement de Django
  22. 求Python *.svg文件操作方法
  23. 求Python *.svg文件操作方法
  24. Trouver la méthode de fonctionnement du fichier Python *.Svg
  25. 【 python】 Internal Guide for Unit Test Practice
  26. 用Python编程佩尔数列pell数列循环结构
  27. 【 python】 échafaudage fastapi: spécification du développement du projet d'interface arrière fastapi
  28. [Python] restful Specification Practice Based on fastapi
  29. Python代码阅读(第26篇):将列表映射成字典
  30. How to use Python to make a screen color extractor with Exe file
  31. Lecture du Code Python (article 26): cartographie des listes dans les dictionnaires
  32. Python代码阅读(第26篇):将列表映射成字典
  33. Python代碼閱讀(第26篇):將列錶映射成字典
  34. Lecture du Code Python (article 26): cartographie des listes dans les dictionnaires
  35. 使用 Python 进行数据可视化之Seaborn
  36. Real time access to stock data, free—— Python crawler Sina stock actual combat
  37. Seaborn pour la visualisation des données en python
  38. 浅识XPath(熟练掌握XPath的语法)【python爬虫入门进阶】(03)
  39. Python中if else语句进行操作的时候哪里除了错,搞不懂
  40. Python题,我刚学,还不会
  41. Python題,我剛學,還不會
  42. Je viens d'apprendre, pas encore.
  43. 云计算开发:Python3-find()方法详解
  44. Real time access to stock data, free—— Python crawler Sina stock actual combat
  45. Développement de l'informatique en nuage: détails de la méthode Python 3 - find ()
  46. 如何使用Python进行超参调参和调优
  47. 如何使用Python進行超參調參和調優
  48. Comment utiliser Python pour le réglage hyperparamétrique
  49. Première connaissance du module urllib Python
  50. Python入门:看了这篇文章如果1个小时没法入门Python,那么还是换个语言吧!!
  51. Python(day1):Python 3 教程
  52. Python(day3):Python3 安装与环境搭建
  53. Python (day3): installation et environnement Python 3
  54. Python (day1): tutoriel Python 3
  55. Démarrer avec Python: Si vous ne pouvez pas commencer avec Python en une heure, changez de langue!!
  56. Pandas:DataFrame对象的基础操作
  57. 关于#python#的问题:月球上物体的体重在地球上的16.5%,编写程序输出未来10年在地球上和月球上的体重状况
  58. 反转一个3位整数(Python 实现)
  59. Questions sur # Python #: les objets lunaires pèsent 16,5% de la masse de la terre et un programme est programmé pour produire la masse de la terre et de la lune au cours des 10 prochaines années
  60. Use of Python pandas!!!!! Explain in detail