我正在尝试理解python 3的较低级别的实现。子进程模块使用了一个名为 _posixsubprocess 的模块。我试图在系统中找到该模块的位置,发现它是存根文件。
有人会指导我吗,因为我不知道什么是存根文件以及如何在较低级别上实现它们?
答案 0 :(得分:0)
您引用的文件是用C编写的Python模块。它不是“存根”文件。真正的实现可以在Modules/_posixsubprocess.c
的stdlib中找到。通过查看Building C and C++ Extensions,您可以了解如何编写C / C ++扩展。这应该有助于您理解_posixsubprocess.c
中的代码。
为了向该文件(它是用C编写的“扩展模块”)添加类型提示,将类型提示添加到扩展名为.pyi
的“存根”文件中。 / p>
可以在the typeshed中找到该文件,该文件是存根文件的集合。排架还包含第三方模块的存根,这是历史遗留物。由于已采用PEP-561,因此不再需要。
存根文件包含普通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
但是在某些情况下,您希望将它们分开存根:
# type: ...
注释语法