Python静态类型检查新工具之pyright 使用指南


Posted in Python onApril 26, 2019

Python是一门动态类型的语言,民间流传一种说法叫”动态一时爽,重构火葬场”,听起来够吓人的,好在这门语言在不断地改进,包括对 PEP484 引入的类型提示(Type Hint),就是在某种程度上,让Python能够像静态语言一样支持类型声明,例如:

def greeting(name: str) -> str:
 return 'Hello ' + name

这就意味着,如果有人调用 greeting函数的时候,传入的参数不是字符串,你用静态类型检查工具一下就能查出来哪些地方没有传入正确类型的值。而 pyright 就是为此而生。

pyright 核心特性:

  • TypeScript 编写,速度快
  • 不依赖Python环境
  • 可配置性强

我们可以直接在 vscode 搜索安装插件 pyright

Python静态类型检查新工具之pyright 使用指南

命令行工具可以使用 npm 安装

sudo npm i -g pyright

如何使用pyright

假设有个python文件 hello.py,里面代码是:

def greeting2(age:int) -> str:
 print("hello")
greeting2("nihao")
greeting2(1)

注意我给greeting2中的参数类型声明是int,返回的返回值是字符串类型,但是在函数中并没有看到return 返回值。直接运行该文件不会有任何错误

python hello.py
hello
hello

在VSCode中会直接有错误提示信息:

Python静态类型检查新工具之pyright 使用指南

如果我们用 pyright 检查代码,输出信息:

pyright hello.py
Finding source files
Found 1 source files
Analyzed 1 file in 1.546sec
/Users/xxxx/Workspace/My/draft/hello.py
  Function with declared type of str must return value (1, 28)
  Argument of type 'str' cannot be assigned to parameter of type 'int' (4, 11)
2 errors, 0 warnings
Find Source Files:    0.001sec
Read Source Files:    0.012sec
Tokenize:             0.085sec
Parse:                0.17sec
Post-parse Walker:    0.147sec
Semantic Analyzer:    0.293sec
Type Analyzer:        0.766sec

提示有两处问题:

  1. Function with declared type of str must return value (1, 28),函数声明返回str类型的值,但是却没有返回
  2. Argument of type 'str' cannot be assigned to parameter of type 'int' (4, 11), 字符串值不能复制给int类型参数

剩下的事情就是按照错误提示修正, 正如 PEP484 所说的那样,Type Hint is not role , is tool。 它并不是规则,只是一个工具,帮助我们规避某些错误。即使你传错了参数,程序编译时并不会报错,只有执行到具体的业务代码的时候才会出错。

GitHub地址:https://github.com/Microsoft/pyright

总结

以上所述是小编给大家介绍的Python静态类型检查新工具之pyright 使用指南,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python多进程编程技术实例分析
Sep 16 Python
Python实现LRU算法的2种方法
Jun 24 Python
python绘制铅球的运行轨迹代码分享
Nov 14 Python
Python中存取文件的4种不同操作
Jul 02 Python
python实现几种归一化方法(Normalization Method)
Jul 31 Python
Python代理IP爬虫的新手使用教程
Sep 05 Python
Win10下python 2.7与python 3.7双环境安装教程图解
Oct 12 Python
python3.8 微信发送服务器监控报警消息代码实现
Nov 05 Python
wxpython绘制音频效果
Nov 18 Python
jupyter notebook 的工作空间设置操作
Apr 20 Python
如何使用Python调整图像大小
Sep 26 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
Oct 15 Python
Python3中_(下划线)和__(双下划线)的用途和区别
Apr 26 #Python
详解Python爬取并下载《电影天堂》3千多部电影
Apr 26 #Python
Python 2/3下处理cjk编码的zip文件的方法
Apr 26 #Python
实例详解Matlab 与 Python 的区别
Apr 26 #Python
Python生成MD5值的两种方法实例分析
Apr 26 #Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
Apr 26 #Python
Python生成rsa密钥对操作示例
Apr 26 #Python
You might like
PHP中读取照片exif信息的方法
2014/08/20 PHP
微博@符号的用户名提示效果。(想@到谁?)
2010/11/05 Javascript
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
2011/06/28 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
基于jQuery实现简单的折叠菜单效果
2015/11/23 Javascript
Vue表单实例代码
2016/09/05 Javascript
jQuery使用方法
2017/02/04 Javascript
jQuery实现字符串全部替换的方法【推荐】
2017/03/09 Javascript
JS组件系列之JS组件封装过程详解
2017/04/28 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
JS模拟浏览器实现全局搜索功能
2019/09/11 Javascript
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
详细解读tornado协程(coroutine)原理
2018/01/15 Python
Python对excel文档的操作方法详解
2018/12/10 Python
Python Process多进程实现过程
2019/10/22 Python
python实现扫雷游戏
2020/03/03 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
Html+Css+Jquery实现左侧滑动拉伸导航菜单栏的示例代码
2020/03/17 HTML / CSS
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
英国经济型酒店品牌:Travelodge
2019/12/17 全球购物
介绍一下MD5加密算法
2016/11/12 面试题
银行财务部实习生的自我鉴定
2013/11/27 职场文书
医学专业本科毕业生自我鉴定
2013/12/28 职场文书
少先队学雷锋活动月总结
2014/03/09 职场文书
大学生第一学年自我鉴定
2014/09/12 职场文书
项目投资意向书范本
2015/05/09 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
重阳节座谈会主持词
2015/07/03 职场文书
2015中学学校工作总结
2015/07/20 职场文书
redis使用不当导致应用卡死bug的过程解析
2021/07/01 Redis