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

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 使用指南,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • 2款Python内存检测工具介绍和使用方法

    去年自己写过一个程序时,不太确定自己的内存使用量,就想找写工具来打印程序或函数的内存使用量.这里将上次找到的2个内存检测工具的基本用法记录一下,今后分析Python程序内存使用量时也是需要的. memory_profiler模块(与psutil一起使用)注:psutil这模块,我太喜欢了,它实现了很多Linux命令的主要功能,如:ps, top, lsof, netstat, ifconfig, who, df, kill, free 等等.示例代码(https://github.com/smi

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

    Python是一门动态类型的语言,民间流传一种说法叫"动态一时爽,重构火葬场",听起来够吓人的,好在这门语言在不断地改进,包括对 PEP484 引入的类型提示(Type Hint),就是在某种程度上,让Python能够像静态语言一样支持类型声明,例如: def greeting(name: str) -> str: return 'Hello ' + name 这就意味着,如果有人调用 greeting函数的时候,传入的参数不是字符串,你用静态类型检查工具一下就能查出来哪些地方没

  • JavaScript静态类型检查工具FLOW简介

    Flow是Facebook出品的,针对JavaScript的静态类型检查工具.其代码托管在github之上,并遵守BSD开源协议. 关于Flow 它可以帮助我们捕获JavaScript开发中的常见错误,而不需要额外地修改你原有的代码,比如静态类型转换,空值引用等问题. 同时,Flow为JavaScript添加了静态类型的语法标识,这样开发者便可以明确代码中的类型,让其自动地被Flow所维护. 目前,Flow具有以下两特性: 1. Flow的类型检查具有可选性 除非你明确告诉Flow需要对某些文件

  • Flow之一个新的Javascript静态类型检查器

    今天我们兴奋的发布了 Flow 的尝鲜版,一个新的Javascript静态类型检查器.Flow为Javascript添加了静态类型检查,以提高开发效率和代码质量.更明确的说,静态类型检查提供的好处像早期错误检查,帮助你发现一些只有在运行时才能发现的错误,以及代码智能感知,它会帮助代码维护,查找,重构和优化. 我们设计Flow的所有功能构建在现有Javascript规范之上.因为Flow主动地在后台工作,所以额外的编译开销很小.Flow并不要求开发者如何编写代码 -- 她用一套复杂的算法分析你熟悉

  • Python中类型检查的详细介绍

    前言 大家都知道Python 是一门强类型.动态类型检查的语言.所谓动态类型,是指在定义变量时,我们无需指定变量的类型,Python 解释器会在运行时自动检查. 与静态类型语言(如 C 语言)相比,这不仅仅是少写了几个类型声明字符: #include <stdlib.h> #include <stdio.h> #define BUFF 100 char* greeting(char* name){ char* msg = (char *) malloc(sizeof(char) *

  • TypeScript 运行时类型检查补充工具

    TypeScript是静态类型系统,在编译时做类型检查.一般而言,如果项目所用到的所有库.模块都是基于ts的,那么静态类型已经可以避免大部分编程层面的类型问题.不过,在一些场景下来,单纯静态类型是无法解决问题的,部分数据是动态传入到系统中的,主要包含场景如下: 第三方数据源(接口API.本地持久化存储.postMessage等) 第三方调用者传参 全局状态变更 当然,还有其他可能,总之,单纯靠静态类型检查,无法解决运行时类型问题.因此,我写了tyshemo这个工具.它可以帮助我们完成运行时的类型

  • Java中静态类型检查是如何进行的实例思路详解

    以下内容来自维基百科,关于静态类型检查和动态类型检查的解释: •静态类型检查:基于程序的源代码来验证类型安全的过程: •动态类型检查:在程序运行期间验证类型安全的过程: Java使用静态类型检查在编译期间分析程序,确保没有类型错误.基本的思想是不要让类型错误在运行期间发生. 以下代码是一个例子,理解了他,你会更好的理解Java静态类型检查是如何工作的. 代码示例 假定我们有如下类,A和B,B继承A. class A { A me() { return this; } public void do

  • Java的静态类型检查示例代码详解

    关于静态类型检查和动态类型检查的解释: 静态类型检查:基于程序的源代码来验证类型安全的过程: 动态类型检查:在程序运行期间验证类型安全的过程: Java使用静态类型检查在编译期间分析程序,确保没有类型错误.基本的思想是不要让类型错误在运行期间发生. 在各色各样的编程语言中,总共存在着两个类型检查机制:静态类型检查和动态类型检查. 静态类型检查是指通过对应用程序的源码进行分析,在编译期间就保证程序的类型安全. 动态类型检查是在程序的运行过程中,验证程序的类型安全.在Java中,编译期间使用静态类型

  • C++的静态类型检查详解

    目录 什么时候引进的? 一个有趣的观察 窄转换 警告的使用 总结 什么时候引进的? 在带类的C的时候,引进了静态(“强”)类型检查. bjarne在<The Design and Evolution of C++ >介绍: 在经历过Simula和Algol68的经验之后,静态类型检查对于我而言已经是一种必需品,唯一的问题是如何把它加进来 一个有趣的观察 学过带类的C(或C++)的程序员竟丧失了寻找由于简单类型错误而造成的运行错误的能力.由于他们逐渐习惯于依赖带类的C(或C++)所提供的类型检查

  • 介绍一款python类型检查工具pyright(推荐)

    近日,微软在 Github 上开源了一个 Python 静态类型检查工具:pyright ,引起了社区内的多方关注. 微软在开源项目上的参与力度是越来越大了,不说收购 Github 这种大的战略野心,只说它家开源的 VS Code 编辑器,在猿界已割粉无数,连我 Python 圈的红人 Kenneth Reitz(多个开源项目的作者,包括 requests.requests-html.responder等)都对它赞不绝口. 如今开源的 Pyright ,口碑还不错,那我们就来看看它有啥本事,顺便

  • 4款Python 类型检查工具,你选择哪个呢?

    微软在 Github 上开源了一个 Python 静态类型检查工具:pyright ,引起了社区内的多方关注. 微软在开源项目上的参与力度是越来越大了,不说收购 Github 这种大的战略野心,只说它家开源的 VS Code 编辑器,在猿界已经割粉无数,连我们 Python 圈的红人 Kenneth Reitz (多个开源项目的作者,包括 requests.requests-html.responder等)都对它赞不绝口. 如今开源的 Pyright ,口碑还不错,那我们就来看看它有啥本事,顺便

随机推荐