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获取糗百图片代码实例
Dec 18 Python
python命令行参数sys.argv使用示例
Jan 28 Python
用Python给文本创立向量空间模型的教程
Apr 23 Python
Python中的ConfigParser模块使用详解
May 04 Python
python中循环语句while用法实例
May 16 Python
Python去除字符串两端空格的方法
May 21 Python
在Django的模型和公用函数中使用惰性翻译对象
Jul 27 Python
python获取代码运行时间的实例代码
Jun 11 Python
在Django中URL正则表达式匹配的方法
Dec 20 Python
python实现学员管理系统
Feb 26 Python
Python实现密码薄文件读写操作
Dec 16 Python
教你怎么用python爬取爱奇艺热门电影
May 20 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面向对象的使用教程 简单数据库连接
2006/11/25 PHP
php下实现伪 url 的超简单方法[转]
2007/09/24 PHP
如何在HTML 中嵌入 PHP 代码
2015/05/13 PHP
PHP简单实现冒泡排序的方法
2016/12/26 PHP
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
jquery $.getJSON()跨域请求
2011/12/21 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
2016/02/15 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
bootstrap如何让dropdown menu按钮式下拉框长度一致
2017/04/10 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
vue源码学习之Object.defineProperty 对数组监听
2018/05/30 Javascript
从零开始用electron手撸一个截屏工具的示例代码
2018/10/10 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
js实现点击生成随机div
2020/01/16 Javascript
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
Python zip函数打包元素实例解析
2019/12/11 Python
使用python去除图片白色像素的实例
2019/12/12 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
台湾百利市购物中心:e-Payless
2017/08/16 全球购物
红旗团支部事迹材料
2014/01/27 职场文书
企业出纳岗位职责
2014/03/12 职场文书
关于学习的演讲稿
2014/05/10 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
中学生打架检讨书
2014/10/13 职场文书
个人贷款收入证明
2014/10/26 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
优秀班集体事迹材料
2014/12/25 职场文书
护理实习生带教计划
2015/01/16 职场文书
护士年终个人总结
2015/02/13 职场文书