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 11 Python
Python 正则表达式实现计算器功能
Apr 29 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
Mar 19 Python
对Tensorflow中的矩阵运算函数详解
Jul 27 Python
Python内存管理实例分析
Jul 10 Python
python 使用while写猜年龄小游戏过程解析
Oct 07 Python
Python如何使用函数做字典的值
Nov 30 Python
解决python 找不到module的问题
Feb 12 Python
Python selenium爬取微博数据代码实例
May 22 Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 Python
Python新建项目自动添加介绍和utf-8编码的方法
Dec 26 Python
OpenCV-Python 实现两张图片自动拼接成全景图
Jun 11 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
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
2011/12/25 PHP
PHP手机号码归属地查询代码(API接口/mysql)
2012/09/04 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
js常用排序实现代码
2010/12/28 Javascript
javascript针对DOM的应用实例(一)
2012/04/15 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
jQuery 判断是否包含在数组中Array[]的方法
2016/08/03 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
2016/08/11 Javascript
AngularJS实用基础知识_入门必备篇(推荐)
2017/07/10 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
vue+layui实现select动态加载后台数据的例子
2019/09/20 Javascript
javascript简单实现深浅拷贝过程详解
2019/10/08 Javascript
JavaScript 接口原理与用法实例详解
2020/05/12 Javascript
Python根据区号生成手机号码的方法
2015/07/08 Python
关于python的list相关知识(推荐)
2017/08/30 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
2018/01/04 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
如何使用Python的Requests包实现模拟登陆
2018/04/27 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
Python实现的栈、队列、文件目录遍历操作示例
2019/05/06 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
初探CSS3中的calc()功能
2015/07/14 HTML / CSS
html5指南-6.如何创建离线web应用程序实现离线访问
2013/01/07 HTML / CSS
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
外企测试工程师面试题
2015/02/01 面试题
驾驶员安全责任书
2014/07/22 职场文书
2014应届本科生自我评价
2014/09/13 职场文书
护士业务学习心得体会
2016/01/25 职场文书
nginx proxy_cache 缓存配置详解
2021/03/31 Servers
CSS 圆形进度栏
2021/04/06 HTML / CSS
python保存大型 .mat 数据文件报错超出 IO 限制的操作
2021/05/10 Python