python中存根文件(.pyi)的用途是什么?
我试图理解python 3的底层实现。子流程模块使用一个名为\u posixsubprocess的模块。我试图在我的系统中找到这个模块的位置,发现它是一个存根文件 我不知道存根文件是什么,以及它们是如何在较低级别实现的,有人能给我指点一下吗?\u posixsubprocess 您引用的文件是一个用C编写的Python模块,它不是一个“存根”文件。真正的实现可以在stdlib中找到。通过查看,您可以了解如何编写C/C++扩展。这将帮助您理解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中的代码 为了将
\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:…
- 您对其他内容使用函数注释,但仍然希望使用类型提示
- 您正在将类型提示添加到现有的代码库中,并希望将现有文件中的代码搅动保持在最小程度
.so
/.pyd
文件,如果在路径上可以找到,则可以导入该文件。您可以用C“轻松”创建自己的模块。但我怀疑它是否是cython。更可能的是它使用了btw:您提到了\u posixsubprocess
,它在CPython中是一个.c
文件,但您还提到您将其视为一个.pyi
文件。你到底在哪里找到了.pyi
文件?你有到Python源代码库的链接吗?。。没有关系。。。我在“打字棚”里找到的。我会更新我的答案