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转换HTML到Text纯文本的方法
Jan 15 Python
详解Python的Django框架中的Cookie相关处理
Jul 22 Python
python分治法求二维数组局部峰值方法
Apr 03 Python
python监测当前联网状态并连接的实例
Dec 18 Python
我用Python抓取了7000 多本电子书案例详解
Mar 25 Python
python日期相关操作实例小结
Jun 24 Python
python实现各种插值法(数值分析)
Jul 30 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
Feb 10 Python
python实现银行实战系统
Feb 26 Python
python和go语言的区别是什么
Jul 20 Python
Python Selenium自动化获取页面信息的方法
Aug 31 Python
Python中的datetime包与time包包和模块详情
Feb 28 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程序员应具有的7种能力小结
2014/11/27 PHP
php打印输出棋盘的实现方法
2014/12/23 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
2015/03/23 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
原型方法的不同写法居然会影响调试的解决方法
2007/03/08 Javascript
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
利用JavaScript实现新闻滚动效果(实例代码)
2013/11/27 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
JQuery 的跨域方法推荐_可跨任何网站
2016/05/18 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
javascript实现数据双向绑定的三种方式小结
2017/03/09 Javascript
vue学习笔记之指令v-text && v-html && v-bind详解
2017/05/12 Javascript
Node.js实现发送邮件功能
2017/11/06 Javascript
layui表格checkbox选择全选样式及功能的实例
2018/03/07 Javascript
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
Angular刷新当前页面的实现方法
2018/11/21 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
python抓取网页图片并放到指定文件夹
2014/04/24 Python
21行Python代码实现拼写检查器
2016/01/25 Python
python 动态加载的实现方法
2017/12/22 Python
Python聊天室程序(基础版)
2018/04/01 Python
使用python画个小猪佩奇的示例代码
2018/06/06 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
Stuart Weitzman欧盟:美国奢华鞋履品牌
2017/05/24 全球购物
煤矿班组长岗位职责
2013/12/29 职场文书
社区维稳工作方案
2014/06/06 职场文书
肖申克救赎观后感
2015/06/02 职场文书
保险公司增员口号
2015/12/25 职场文书