python中的存根文件(.pyi)有什么用途?

时间:2019-11-26 13:04:22

标签: python python-3.x subprocess system

我正在尝试理解python 3的较低级别的实现。子进程模块使用了一个名为 _posixsubprocess 的模块。我试图在系统中找到该模块的位置,发现它是存根文件。

有人会指导我吗,因为我不知道什么是存根文件以及如何在较低级别上实现它们?

1 个答案:

答案 0 :(得分:0)

_posixsubprocess

您引用的文件是用C编写的Python模块。它不是“存根”文件。真正的实现可以在Modules/_posixsubprocess.c的stdlib中找到。通过查看Building C and C++ Extensions,您可以了解如何编写C / C ++扩展。这应该有助于您理解_posixsubprocess.c中的代码。

为了向该文件(它是用C编写的“扩展模块”)添加类型提示,将类型提示添加到扩展名为.pyi的“存根”文件中。 / p>

可以在the typeshed中找到该文件,该文件是存根文件的集合。排架还包含第三方模块的存根,这是历史遗留物。由于已采用PEP-561,因此不再需要。

关于存根/ pyi文件

存根文件包含普通Python模块的类型提示信息。完整的官方文档可以在in the section about stub-files in PEP-484中找到。

例如,如果您有一个像这样的Python模块mymodule.py

def myfunction(name):
   return "Hello " + name

然后,您可以通过存根文件mymodule.pyi添加类型提示。请注意,这里的省略号(...)是语法的一部分,因此下面的代码块实际上显示了完整的文件内容:

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

它们看起来与C头文件非常相似,因为它们仅包含函数签名,但是它们的使用纯粹是可选的。

您还可以像下面这样直接在.py模块中添加类型提示:

def myfunction(name: str) -> str:
   return "Hello " + name

但是在某些情况下,您希望将它们分开存根:

  • 您想保持您的代码与Python 2兼容,并且不喜欢# type: ...注释语法
  • 您将函数注释用于其他内容,但仍想使用类型提示
  • 您要将类型提示添加到现有的代码库中,并希望将现有文件中的代码搅动降至最低