pyi⽂件是⼲嘛的?(⼀⽂读懂Python的存根⽂件和类型检查)
python是做什么的通俗易懂的 参考资料:
写这篇⽂章的原因是我在⽹上下载的项⽬中看到了.pyi⽂件,但是寻了很多资料才对这些个概念(存根⽂件、类型检查)有了⼀个直观的印象。这篇随笔的⽬的是⽤最短的篇幅让你理解这些概念!
⾸先我介绍⼏个论断:
1. PEP484
⾸先PEP是Python社区使⽤的规范化⽂档(就好像IETF⽤的rfc),PEP484这个⽂档是对type hint作规范化的⽂档!它规范化了type hint所需的语法⽤法...⽐如如果你关⼼stub存根⽂件是怎么做规范化的,你可以看参考资料2。
2.type checker
PEP484只是⼀个规范化的⽂档,没有给出具体的hint软件。事实上有⼀个内置模块叫typing,但它是让你⽤规范的语法写type hint的。不是⼀个类型检查器
问:有哪些类型检查器可⽤?答: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做静态检查驱动。在代码没有运⾏的时候就检查出来了类型错误!!这在维护⼤型的项⽬的时候是⾮常有⽤的。
第⼀步:
⽣成代码⽂件和存根⽂件,其中存根⽂件放到⼀个统⼀的⽂件夹中统⼀存放。
第⼆步:
按照Pycharm⽂档中的指引,将存根⽂件的⽬录添加到PATH中,⼀定要注意⽂件名要对应上。(在IDE中可以⽅便的配置,当真正⼯程上应⽤的话可能就要⼿动添加PATH了,但要注意:hints是给⼈看的,类型检查也是给⼈警告的,不能脱离应⽤)
Reuse stubs
You can make your stubs accessible for your other PyCharm projects.
1. Click the Project Interpreter selector in the Status Bar and select Interpreter Settings.
2. In the Project Interpreter dialog, click and select Show All, then in the opened Project Interpreters dialog, click .
3.
4. 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 accessi
ble through the path you have just added.
第三步:
看⼀下结果,发现两个module⽂件都到了对应的存根。其中在最左边出现了 * ,点击的话可以在实现以及存根中跳转。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论