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获取服务器信息的最简单实现方法
Mar 05 Python
使用PDB模式调试Python程序介绍
Apr 05 Python
Python生成器(Generator)详解
Apr 13 Python
Python的Flask框架中实现登录用户的个人资料和头像的教程
Apr 20 Python
Python使用三种方法实现PCA算法
Dec 12 Python
python3实现随机数
Jun 25 Python
利用anaconda作为python的依赖库管理方法
Aug 13 Python
自适应线性神经网络Adaline的python实现详解
Sep 30 Python
pytorch中的自定义数据处理详解
Jan 06 Python
Django Admin 上传文件到七牛云的示例代码
Jun 20 Python
python 监控logcat关键字功能
Sep 04 Python
Pandas对每个分组应用apply函数的实现
Dec 13 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
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
php之static静态属性与静态方法实例分析
2015/07/30 PHP
php 读取输出其他文件的实现方法
2016/07/26 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
关于js获取radio和select的属性并控制的代码
2011/05/12 Javascript
阻止子元素继承父元素事件具体思路及实现
2013/05/02 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
jQuery中toggleClass()方法用法实例
2015/01/05 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
2015/09/06 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
JavaScript中的splice方法用法详解
2016/07/20 Javascript
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
详解Axios 如何取消已发送的请求
2018/10/20 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
js页面加载后执行的几种方式小结
2020/01/30 Javascript
Vue export import 导入导出的多种方式与区别介绍
2020/02/12 Javascript
通过实例了解Render Props回调地狱解决方案
2020/11/04 Javascript
Python中关于字符串对象的一些基础知识
2015/04/08 Python
python访问抓取网页常用命令总结
2017/04/11 Python
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
Linux管理员面试经常问道的相关命令
2014/12/12 面试题
值传递还是引用传递
2015/02/08 面试题
销售经理岗位职责
2014/03/16 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
公务员学习习总书记“三严三实”思想汇报
2014/09/19 职场文书
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript
淡雅古典唯美少女娇媚宁静迷人写真
2022/03/21 杂记