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中的WSGI接口
May 11 Python
python difflib模块示例讲解
Sep 13 Python
django rest framework之请求与响应(详解)
Nov 06 Python
Mac下Anaconda的安装和使用教程
Nov 29 Python
python实现Dijkstra静态寻路算法
Jan 17 Python
基于wxPython的GUI实现输入对话框(2)
Feb 27 Python
用Python中的turtle模块画图两只小羊方法
Apr 09 Python
Python中利用LSTM模型进行时间序列预测分析的实现
Jul 26 Python
Python语言异常处理测试过程解析
Jan 08 Python
Python如何转换字符串大小写
Jun 04 Python
Spring http服务远程调用实现过程解析
Jun 11 Python
python基于win32api实现键盘输入
Dec 09 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
打造计数器DIY三步曲(中)
2006/10/09 PHP
PHP源码之 ext/mysql扩展部分
2009/07/17 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
2011/03/28 PHP
什么情况下可以不写PHP的闭合标签“?>”
2014/08/28 PHP
PHP实现将标点符号正则替换为空格的方法
2017/08/09 PHP
详解PHP中curl_multi并发的实现
2020/06/08 PHP
jQuery弹性滑动导航菜单实现思路及代码
2013/05/02 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
javascript生成json数据简单示例分享
2014/02/14 Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
2015/11/30 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
2016/11/04 Javascript
B/S(Web)实时通讯解决方案分享
2017/04/06 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
微信小程序中button组件的边框设置的实例详解
2017/09/27 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
详解vue.js之props传递参数
2017/12/12 Javascript
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
2020/05/20 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
2014/01/22 Python
python获取元素在数组中索引号的方法
2015/07/15 Python
Python 制作糗事百科爬虫实例
2016/09/22 Python
python fabric实现远程部署
2017/01/05 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
Python通用函数实现数组计算的方法
2019/06/13 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
python import 上级目录的导入
2020/11/03 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
公司财务工作总结的自我评价
2013/11/23 职场文书
英语专业学生个人求职信范文
2014/01/06 职场文书
大学生评语大全
2014/04/18 职场文书
小学数学国培研修日志
2015/11/13 职场文书
校运会班级霸气口号
2015/12/24 职场文书