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使用urlparse分析网址中域名的方法
Apr 15 Python
python简单获取数组元素个数的方法
Jul 13 Python
Python实现的连接mssql数据库操作示例
Aug 17 Python
Python实现删除排序数组中重复项的两种方法示例
Jan 31 Python
flask框架jinja2模板与模板继承实例分析
Aug 01 Python
python实现简单日志记录库glog的使用
Dec 13 Python
利用python实现.dcm格式图像转为.jpg格式
Jan 13 Python
Python实现CNN的多通道输入实例
Jan 17 Python
python右对齐的实例方法
Jul 05 Python
Django中如何用xlwt生成表格的方法步骤
Jan 31 Python
PyQt5通过信号实现MVC的示例
Feb 06 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
Feb 25 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
用Apache反向代理设置对外的WWW和文件服务器
2006/10/09 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
为PHP5.4开启Zend OPCode缓存
2014/12/26 PHP
javascript 使td内容不换行不撑开
2012/11/29 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
NodeJS创建最简单的HTTP服务器
2017/05/15 NodeJs
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
如何安装控制器JavaScript生成插件详解
2018/10/21 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
2019/03/05 Javascript
[02:05]2014DOTA2国际邀请赛 BBC外卡赛赛后总结
2014/07/09 DOTA
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
详解Python中的__new__、__init__、__call__三个特殊方法
2016/06/02 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
Python 获取 datax 执行结果保存到数据库的方法
2019/07/11 Python
python批量将excel内容进行翻译写入功能
2019/10/10 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
python 回溯法模板详解
2020/02/26 Python
通过自学python能找到工作吗
2020/06/21 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
Django+RestFramework API接口及接口文档并返回json数据操作
2020/07/12 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
html5 Canvas实现图片旋转的示例
2018/01/15 HTML / CSS
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
COSETTE官网:奢华,每天
2020/03/22 全球购物
临床医学专业学生的自我评价分享
2013/11/21 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
公司停电通知
2015/04/15 职场文书
2015年煤矿工作总结
2015/04/28 职场文书
趣味运动会标语口号
2015/12/26 职场文书
公文格式,规则明细(新手收藏)
2019/07/23 职场文书
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技