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

python中存根文件(.pyi)的用途是什么?,python,python-3.x,subprocess,system,Python,Python 3.x,Subprocess,System,我试图理解python 3的底层实现。子流程模块使用一个名为\u posixsubprocess的模块。我试图在我的系统中找到这个模块的位置,发现它是一个存根文件 我不知道存根文件是什么,以及它们是如何在较低级别实现的,有人能给我指点一下吗?\u posixsubprocess 您引用的文件是一个用C编写的Python模块,它不是一个“存根”文件。真正的实现可以在stdlib中找到。通过查看,您可以了解如何编写C/C++扩展。这将帮助您理解\u posixsubprocess.c中的代码 为了将

我试图理解python 3的底层实现。子流程模块使用一个名为\u posixsubprocess的模块。我试图在我的系统中找到这个模块的位置,发现它是一个存根文件

我不知道存根文件是什么,以及它们是如何在较低级别实现的,有人能给我指点一下吗?

\u posixsubprocess 您引用的文件是一个用C编写的Python模块,它不是一个“存根”文件。真正的实现可以在stdlib中找到。通过查看,您可以了解如何编写C/C++扩展。这将帮助您理解
\u posixsubprocess.c
中的代码

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

该文件是存根文件的集合。typeshed还包含第三方模块的存根,这是历史遗留下来的。这一点已经不再需要,因为它已经被采纳

关于存根/pyi文件 存根文件包含普通Python模块的类型提示信息。可以找到完整的官方文件

例如,如果您有一个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:…
    注释语法
  • 您对其他内容使用函数注释,但仍然希望使用类型提示
  • 您正在将类型提示添加到现有的代码库中,并希望将现有文件中的代码搅动保持在最小程度

也许你在找这个?因此,它本质上是一个Cython模块,可以直接集成到python解释器中,作为一个C编译代码,如果我错了请纠正我,“直接集成”可能不是我会选择的措辞。编译后,它将成为一个
.so
/
.pyd
文件,如果在路径上可以找到,则可以导入该文件。您可以用C“轻松”创建自己的模块。但我怀疑它是否是cython。更可能的是它使用了btw:您提到了
\u posixsubprocess
,它在CPython中是一个
.c
文件,但您还提到您将其视为一个
.pyi
文件。你到底在哪里找到了
.pyi
文件?你有到Python源代码库的链接吗?。。没有关系。。。我在“打字棚”里找到的。我会更新我的答案