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中的进程分支fork和exec详解
Apr 11 Python
python先序遍历二叉树问题
Nov 10 Python
Python实现打印螺旋矩阵功能的方法
Nov 21 Python
python的re正则表达式实例代码
Jan 24 Python
Python 记录日志的灵活性和可配置性介绍
Feb 27 Python
浅析python的优势和不足之处
Nov 20 Python
Python使用统计函数绘制简单图形实例代码
May 15 Python
python实现串口自动触发工作的示例
Jul 02 Python
python如何实现不可变字典inmutabledict
Jan 08 Python
python用tkinter实现一个简易能进行随机点名的界面
Sep 27 Python
python字典通过值反查键的实现(简洁写法)
Sep 30 Python
使用Django实现商城验证码模块的方法
Jun 01 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中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
Dojo 学习笔记入门篇 First Dojo Example
2009/11/15 Javascript
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
jquery miniui 教程 表格控件 合并单元格应用
2012/11/25 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
2014/08/19 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
解决vue点击控制单个样式的问题
2018/09/05 Javascript
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
Python中使用PyHook监听鼠标和键盘事件实例
2014/07/18 Python
Python中动态创建类实例的方法
2017/03/24 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
2020/02/20 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
Kipling澳洲官网:购买凯浦林包包
2020/12/17 全球购物
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
公司中秋节活动方案
2014/02/12 职场文书
优秀共产党员先进事迹材料
2014/05/06 职场文书
增员口号大全
2014/06/18 职场文书
竞选班干部演讲稿400字
2014/08/20 职场文书
英文感谢信格式
2015/01/21 职场文书
《检阅》教学反思
2016/02/22 职场文书
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server
Mysql事务索引知识汇总
2022/03/17 MySQL