参考资料:html

写这篇文章的缘由是我在网上下载的项目中看到了.pyi文件,可是寻找了不少资料才对这些个概念(存根文件、类型检查)有了一个直观的印象。这篇随笔的目的是用最短的篇幅让你理解这些概念!测试

首先我介绍几个论断:this

1. PEP484spa

首先PEP是Python社区使用的规范化文档(就好像IETF用的rtf),PEP484这个文档是对type hint做规范化的文档!它规范化了type hint所需的语法用法...好比若是你关心stub存根文件是怎么作规范化的,你能够看参考资料2。.net

2.type checkercode

PEP484只是一个规范化的文档,没有给出具体的hint软件。事实上有一个内置模块叫typing,但它是让你用规范的语法写type hint的。不是一个类型检查器!!!htm

问:有哪些类型检查器可用?答:Pycharm内置有type checker,而且可用,明确支持stub file。mypy这个软件明确支持stub。其余的hinter,pyhinter等...我测试了一下,在vscode中效果不理想。

3.来看看,一个最简单的type hint,一个最简单的stub file长什么样

一个最简单的带annotation(type hint)的函数定义:

def greeting(name: str) -> str:

return "Hello" + name

一个最简单的stub file:

def greeting(name: str) -> str: ...

4.后缀为.pyi的stub存根文件的做用:

当没有存根文件,同时在函数定义的时候不加annotation的状况:

可见,因为python没有内置静态类型检查,只有运行时的动态检查。Pycharm给这个在运行时会出错的文件打了小对勾。

可是,当咱们在同一个文件夹下写一个stub file以后呢?

有了stub file的指引,有了Pycharm内置的type checker作静态检查驱动。在代码没有运行的时候就检查出来了类型错误!!这在维护大型的项目的时候是很是有用的。

看了上面这几个论断,你是否是对相关的概念有了一个初步的理解?下面咱们本身动手作一个实验,目的是在一个文件夹中写module并定义函数,在另外一个文件夹中统一存放存根文件(由于方便管理呀,而且可以屡次使用实现复用!)并且咱们已经知道了,type checker这个活不是必须的,能够由mypy,Pycharm来干,那么咱们想找到指导固然要寻求这些工具的指导。好比:Pycharm的stub说明。https://www.jetbrains.com/help/pycharm/stubs.html#create-stub-external,废话很少说,动手作一作。

第一步:

生成代码文件和存根文件,其中存根文件放到一个统一的文件夹中统一存放。

第二步:

按照Pycharm文档中的指引,将存根文件的目录添加到PATH中,必定要注意文件名要对应上。(在IDE中能够方便的配置,当真正工程上应用的话可能就要手动添加PATH了,但要注意:hints是给人看的,类型检查也是给人警告的,不能脱离应用)

Reuse stubs

You can make your stubs accessible for your other PyCharm projects.

Click the Project Interpreter selector in the Status Bar and select Interpreter Settings.

In the Project Interpreter dialog, click

 and select Show All, then in the opened Project Interpreters dialog, click

.

In the Interpreter paths dialog, click

 to add the new path record:

Inspect your project: the directory with the stub files is now marked as a library root.

Any time you will use this project interpreter to work with other projects, this stub library will be accessible through the path you have just added.

第三步:

看一下结果,发现两个module文件都找到了对应的存根。其中在最左边出现了 * ,点击的话能够在实现以及存根中跳转。

python 存根_pyi文件是干吗的?(一文读懂Python的存根文件和类型检查)相关推荐

  1. python输入什么就输出什么_一文读懂Python的输入和输出

    本文介绍了Python的输入和输出,既然是Python代码,那么就一定有输出量,那么,Python是如何输出的呢? 输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'h ...

  2. python读取枚举_一文读懂Python 枚举

    enum是一组绑定到唯一常数值的符号名称,并且具备可迭代性和可比较性的特性.我们可以使用 enum 创建具有良好定义的标识符,而不是直接使用魔法字符串或整数,也便于开发工程师的代码维护. 创建枚举 我 ...

  3. 不是python对文件的读操作方法的是-一文读懂Python对文件的各种操作方式-阿里云开发者社区...

    文件操作:Python中的文件对象不仅可以用来访问普通的磁盘文件,而且也可以访问任何其它类型抽象层面上的"文件". 通过Python程序来对计算机中的各种文件进行增删改查的操作,也 ...

  4. python运行方式特点_编程必修课:一文弄懂python的运行机制

    Python的维基百科说明:"是一种广泛使用的解释型,高级编程,通用型语言,具有动态类型和垃圾回收功能,能够自动管理内存使用" Python的设计哲学:优美优于丑陋,明了优于隐晦 ...

  5. python中的映射_一文读懂Python中的映射

    python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删除成员. ...

  6. python中什么是异常_一文教你读懂 Python 中的异常信息

    在写 Python 代码的时候,当代码中出现错误,会在输出的时候打印 Traceback  错误信息,很多初学者看到那一堆错误信息,往往都会处于懵逼状态,脑中总会冒出一句,这都是些啥玩意.如果你是第一 ...

  7. 一文读懂 Python 开发环境配置

    文章目录 Python 多版本管理 1. 多版本使用需求 2. Windows 下多版本管理[^1] 3. Linux 系统下多版本管理[^2] Python 虚拟环境配置 1. 原理和配置需求 操作 ...

  8. python中row是什么意思_一文搞懂Python中的yield

    关注公众号「Python七号」,及时 get Python 技能. yield 可以实现生成器,可以实现协程. 什么是生成器,什么是协程,如果还不了解,可以继续往下看,概念可以不懂,只要理解它的作用和 ...

  9. python输入什么就输出什么意思_一文读懂Python的输入和输出

    本文介绍了Python的输入和输出,既然是Python代码,那么就一定有输出量,那么,Python是如何输出的呢? 输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'h ...

  10. 一文读懂python本地开发环境配置

    python和java包管理的不同 java java需要安装jdk,我们通常使用maven进行包管理,有中央仓库,有本地仓库,项目优先从本地仓库拉取,拉不到会从远程仓库拉取,所有项目用到的包都会放在 ...

最新文章

  1. Linux常用命令——cat,tac
  2. python的数值类型和运算符_python的数值类型和运算符
  3. TPAMI 2020 | 无监督多类域适应:理论,算法与实践
  4. 一位工作了10年的C++程序员总结出这些忠告
  5. printf打印数组_彻底弄懂为什么不能把栈上分配的数组(字符串)作为返回值
  6. 《Web Load Testing For Dummie》读书笔记
  7. Java实现导出Excel文件功能
  8. java 静态方法 异常_java – 如何模拟一个void静态方法来抛出与Powermock的异常?...
  9. plt.rcParams[‘font.sans-serif‘] = [‘SimHei‘] 和plt.rcParams[‘axes.unicode_minus‘] = False
  10. 2020年居家实习日志
  11. 通达OA11.0 补丁文件
  12. 计算机教室建设方案ppt,屏蔽机房建设方案.ppt
  13. 年龄和血压对照表,有必要了解!
  14. 场景管理:四叉树算法C++实现
  15. MSVCRTD.lib重复定义问题
  16. 【单调队列优化】CF319C——Kalila and Dimna in the Logging Industry
  17. 什么是数据流图 Data Flow Diagram (DFD)
  18. 在Windows中开启Wifi热点共享,无需第三方工具
  19. 推荐2本普通人参悟的书
  20. Java爬虫爬取网易汽车车型库

热门文章

  1. JavaScript中的break
  2. javascript基础常识问答(六)
  3. java int和Integer的区别
  4. 从SNP_VCF文件提取SNV
  5. Android开机速度优化 Android 开机时间优化
  6. 【整理向】老板让我用SPSS做A/Btest,我偏要用python
  7. K-mer频率分布图代码实现
  8. C#篇-unity和序列化和反序列
  9. 理性看待360大战腾讯
  10. 【考研英语语法】十大词性