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的Django中将文件上传至七牛云存储的代码分享
Jun 03 Python
Python判断变量是否为Json格式的字符串示例
May 03 Python
python验证码识别教程之滑动验证码
Jun 04 Python
python进行两个表格对比的方法
Jun 27 Python
关于python字符串方法分类详解
Aug 20 Python
python 实现多线程下载视频的代码
Nov 15 Python
Python终端输出彩色字符方法详解
Feb 11 Python
Python多线程实现支付模拟请求过程解析
Apr 21 Python
Python绘图之柱形图绘制详解
Jul 28 Python
python pillow库的基础使用教程
Jan 13 Python
pycharm 使用anaconda为默认环境的操作
Feb 05 Python
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
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
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
php 可变函数使用小结
2018/06/12 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
js加载之使用DOM方法动态加载Javascript文件
2013/11/08 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
JS操作iframe里的dom(实例讲解)
2014/01/29 Javascript
js判断鼠标位置是否在某个div中的方法
2016/02/26 Javascript
原生态js,鼠标按下后,经过了那些单元格的简单实例
2016/08/11 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
2018/03/01 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
2018/11/27 Javascript
Vue中全局变量的定义和使用
2019/06/05 Javascript
深入解析koa之中间件流程控制
2019/06/17 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
[02:23]2014DOTA2国际邀请赛中国战队回顾
2014/08/01 DOTA
在Python程序中实现分布式进程的教程
2015/04/28 Python
Python多线程爬虫简单示例
2016/03/04 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
pandas 按照特定顺序输出的实现代码
2018/07/10 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
Python一个简单的通信程序(客户端 服务器)
2019/03/06 Python
python之生产者消费者模型实现详解
2019/07/27 Python
python如何建立全零数组
2020/07/19 Python
Python3爬虫里关于代理的设置总结
2020/07/30 Python
13个Pandas实用技巧,助你提高开发效率
2020/08/19 Python
css3实现背景图片拉伸效果像桌面壁纸一样
2013/08/19 HTML / CSS
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
车间班长岗位职责
2013/11/30 职场文书
小学班主任教育随笔
2015/08/15 职场文书
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android
html form表单基础入门案例讲解
2021/07/15 HTML / CSS
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL
Python使用DFA算法过滤内容敏感词
2022/04/22 Python