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 10 Python
python安装以及IDE的配置教程
Apr 29 Python
Python实现简单字典树的方法
Apr 29 Python
浅谈python字符串方法的简单使用
Jul 18 Python
Python实现base64编码的图片保存到本地功能示例
Jun 22 Python
Python Series从0开始索引的方法
Nov 06 Python
用python3 返回鼠标位置的实现方法(带界面)
Jul 05 Python
用Python爬取QQ音乐评论并制成词云图的实例
Aug 24 Python
python识别验证码图片实例详解
Feb 17 Python
部署Django到阿里云服务器教程示例
Jun 03 Python
pytorch 把图片数据转化成tensor的操作
Mar 04 Python
python文本处理的方案(结巴分词并去除符号)
May 26 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中计算时间差的几种方法
2009/12/31 PHP
php简单压缩css样式示例
2016/09/22 PHP
PHP的Json中文处理解决方案
2016/09/29 PHP
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
给moz-firefox下添加IE方法和属性
2007/04/10 Javascript
jquery清空textarea等输入框实现代码
2013/04/22 Javascript
类似php的js数组的in_array函数自定义方法
2013/12/27 Javascript
JS实现图片放大镜效果的方法
2015/02/27 Javascript
js仿京东轮播效果 选项卡套选项卡使用
2017/01/12 Javascript
canvas实现环形进度条效果
2017/03/23 Javascript
vue中使用sessionStorage记住密码功能
2018/07/24 Javascript
vue实现移动端省市区选择
2019/09/27 Javascript
JS实现按比例缩小图片宽高
2020/08/24 Javascript
node.js通过Sequelize 连接MySQL的方法
2020/12/28 Javascript
python实现多线程采集的2个代码例子
2014/07/07 Python
Python中enumerate函数代码解析
2017/10/31 Python
Python列表list排列组合操作示例
2018/12/18 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
2019/06/25 Python
Python+PyQt5实现灭霸响指功能
2020/05/25 Python
Python之Sklearn使用入门教程
2021/02/19 Python
TensorFlow2.0使用keras训练模型的实现
2021/02/20 Python
利用SVG和CSS3来实现一个炫酷的边框动画
2015/07/22 HTML / CSS
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
木工主管岗位职责
2013/12/08 职场文书
员工保密协议书
2014/09/27 职场文书
自愿离婚协议书2015
2015/01/26 职场文书
2015年宣传部个人工作总结
2015/05/14 职场文书
军训后的感想
2015/08/07 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL
python 解决微分方程的操作(数值解法)
2021/05/26 Python
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
2021/05/26 Servers
详解nginx进程锁的实现
2021/06/14 Servers