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 相关文章推荐
Django发送html邮件的方法
May 26 Python
Python中列表与元组的乘法操作示例
Feb 10 Python
对python中for、if、while的区别与比较方法
Jun 25 Python
Django之创建引擎索引报错及解决详解
Jul 17 Python
Python使用scipy模块实现一维卷积运算示例
Sep 05 Python
python实现的汉诺塔算法示例
Oct 23 Python
Python测试Kafka集群(pykafka)实例
Dec 23 Python
手把手教你进行Python虚拟环境配置教程
Feb 03 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
Mar 10 Python
python高阶函数map()和reduce()实例解析
Mar 16 Python
Python-opencv实现红绿两色识别操作
Jun 04 Python
python3处理word文档实例分析
Dec 01 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实现的返回数据格式化类实例
2014/09/22 PHP
php生成二维码图片方法汇总
2016/12/17 PHP
Yii 2.0中场景的使用教程
2017/06/02 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
PHP删除字符串中非字母数字字符方法总结
2019/01/20 PHP
Prototype使用指南之base.js
2007/01/10 Javascript
js 字符串转换成数字的三种方法
2013/03/23 Javascript
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
js简单倒计时实现代码
2016/04/30 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
js选项卡的制作方法
2017/01/23 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
2017/02/09 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
2017/12/22 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
使用 Element UI Table 的 slot-scope方法
2019/10/10 Javascript
用Python的Flask框架结合MySQL写一个内存监控程序
2015/11/07 Python
Python实现登陆文件验证方法
2018/10/06 Python
Python 处理图片像素点的实例
2019/01/08 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
python计算波峰波谷值的方法(极值点)
2020/02/18 Python
泰国汽车、火车和轮渡票预订网站:Bus Online Ticket
2017/09/09 全球购物
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
Rosetta Stone官方网站:语言学习
2019/01/05 全球购物
简述数组与指针的区别
2014/01/02 面试题
管理部副部长岗位职责范文
2014/03/09 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
企业员工薪酬方案
2014/06/04 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
社区植树节活动总结
2015/02/06 职场文书
vue3如何优雅的实现移动端登录注册模块
2021/03/29 Vue.js
Python中itertools库的四个函数介绍
2022/04/06 Python
Python中request的基本使用解决乱码问题
2022/04/12 Python