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中内置的日志模块logging用法详解
Jul 12 Python
python使用pymysql实现操作mysql
Sep 13 Python
详解python中字典的循环遍历的两种方式
Feb 07 Python
Python自动化运维之IP地址处理模块详解
Dec 10 Python
Python实现决策树C4.5算法的示例
May 30 Python
python实现人人自动回复、抢沙发功能
Jun 08 Python
python time.sleep()是睡眠线程还是进程
Jul 09 Python
Python3 批量扫描端口的例子
Jul 25 Python
解决Python列表字符不区分大小写的问题
Dec 19 Python
浅析Python数字类型和字符串类型的内置方法
Dec 22 Python
python+tifffile之tiff文件读写方式
Jan 13 Python
python中怎么表示空值
Jun 19 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
图书管理程序(二)
2006/10/09 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
2020/04/05 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
解析PHP之提取多维数组指定列的方法
2017/01/03 PHP
PHP实现的数独求解问题示例
2017/04/18 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
javascript与CSS复习(二)
2010/06/29 Javascript
读jQuery之二(两种扩展)
2011/06/11 Javascript
jquery 按键盘上的enter事件
2014/05/11 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
JS制作简单的三级联动
2015/03/18 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
2015/09/24 Javascript
详解JavaScript的流程控制语句
2015/11/30 Javascript
js时间戳转为日期格式的方法
2015/12/28 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
2016/11/18 Javascript
react-router中的属性详解
2017/06/01 Javascript
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
python实现文件路径和url相互转换的方法
2015/07/06 Python
python批量修改图片后缀的方法(png到jpg)
2018/10/25 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
法国家具及室内配件店:home24
2017/01/21 全球购物
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
幼儿园元旦亲子活动方案
2014/02/17 职场文书
党的群众路线教育实践活动个人对照检查材料(乡镇)
2014/11/05 职场文书
离职证明格式样本
2015/06/12 职场文书