Python静态类型检查新工具之pyright 使用指南

yipeiwu_com6年前Python基础

Python是一门动态类型的语言,民间流传一种说法叫”动态一时爽,重构火葬场”,听起来够吓人的,好在这门语言在不断地改进,包括对 PEP484 引入的类型提示(Type Hint),就是在某种程度上,让Python能够像静态语言一样支持类型声明,例如:

def greeting(name: str) -> str:
 return 'Hello ' + name

这就意味着,如果有人调用 greeting函数的时候,传入的参数不是字符串,你用静态类型检查工具一下就能查出来哪些地方没有传入正确类型的值。而 pyright 就是为此而生。

pyright 核心特性:

  • TypeScript 编写,速度快
  • 不依赖Python环境
  • 可配置性强

我们可以直接在 vscode 搜索安装插件 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中会直接有错误提示信息:


如果我们用 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已协程方式处理任务实现过程

这篇文章主要介绍了python已协程方式处理任务实现过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 #从genent中导入mo...

Python交换变量

如: 代码如下:a, b, c = b, c, a来个复杂一点的例子,再来一顿家喻户晓的“冒泡排序”吧: 代码如下:array =...

浅谈机器学习需要的了解的十大算法

浅谈机器学习需要的了解的十大算法

毫无疑问,近些年机器学习和人工智能领域受到了越来越多的关注。随着大数据成为当下工业界最火爆的技术趋势,机器学习也借助大数据在预测和推荐方面取得了惊人的成绩。比较有名的机器学习案例包括Ne...

使用Python生成随机密码的示例分享

生成随机密码这件事情用python来干确实相当的方便,优美的string方法加上choice简直是绝配 make_password.py ###简单几行代码执行即可生成记不住的字符...

Python2和Python3的共存和切换使用

Python2和Python3的共存和切换使用

  从python2到python3,这两个版本可以说是从语法、编码等多个方面上都有很大的差别。为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容,也就是说许多针对早...