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基础入门之seed()方法的使用
May 15 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
Jun 30 Python
Django接受前端数据的几种方法总结
Nov 04 Python
python 连接sqlite及简单操作
Jun 30 Python
Python探索之URL Dispatcher实例详解
Oct 28 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
Nov 29 Python
Python中实例化class的执行顺序示例详解
Oct 14 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
给Python学习者的文件读写指南(含基础与进阶)
Jan 29 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
Apr 02 Python
浅谈anaconda python 版本对应关系
Oct 07 Python
python 装饰器的基本使用
Jan 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
7个超级实用的PHP代码片段
2011/07/11 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
2014/06/30 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
php支付宝手机网页支付类实例
2015/03/04 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
2019/05/08 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
DEFER怎么用?
2006/07/01 Javascript
JavaScript方法和技巧大全
2006/12/27 Javascript
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
js/jquery去掉空格,回车,换行示例代码
2013/11/05 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
Javascript中字符串相关常用的使用方法总结
2017/03/13 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
jQuery中可见性过滤器简单用法示例
2018/03/31 jQuery
关于vue中的ajax请求和axios包问题
2018/04/19 Javascript
JS实现动态星空背景效果
2019/11/01 Javascript
Element PageHeader页头的使用方法
2020/07/26 Javascript
[02:35]DOTA2超级联赛专访XB 难忘一年九冠称王
2013/06/20 DOTA
python实现的系统实用log类实例
2015/06/30 Python
python实现ping的方法
2015/07/06 Python
Python删除Java源文件中全部注释的实现方法
2017/08/30 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
python实现udp聊天窗口
2020/03/31 Python
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
法国最大的在线眼镜店:EasyLunettes
2019/08/26 全球购物
幼儿园开学家长寄语
2014/01/19 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
航空学院求职信
2014/06/11 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
出纳工作检讨书范文
2014/12/27 职场文书
Python标准库之typing的用法(类型标注)
2021/06/02 Python
Python查找算法的实现 (线性、二分,分块、插值查找算法)
2022/04/24 Python