首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >存根文件(.pyi )在python中的用途是什么?

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

Stack Overflow用户
提问于 2019-11-26 13:04:22
回答 1查看 26.6K关注 0票数 43

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-27 09:16:45

_posixsubprocess

您所引用的文件是用C编写的Python模块,它不是“存根”文件。真正的实现可以在Modules/_posixsubprocess.c的stdlib中找到。您可以通过查看构建C和C++扩展来了解编写C/C++扩展的方式。这将帮助您理解_posixsubprocess.c中的代码。

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

该文件可以在打好的中找到,它是存根文件的集合。类型化还包含第三方模块的存根,这是历史遗留下来的。自从佩普-561被采用以来,这已经不再需要了。

关于存根/pyi文件

存根文件包含普通Python模块的类型提示信息。完整的官方文档可以找到在PEP-484中有关存根文件的部分中。

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

代码语言:javascript
运行
复制
def myfunction(name):
   return "Hello " + name

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

代码语言:javascript
运行
复制
def myfunction(name: str) -> str: ...

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

您还可以在.py模块中直接添加类型提示,如下所示:

代码语言:javascript
运行
复制
def myfunction(name: str) -> str:
   return "Hello " + name

但是,在某些情况下,您希望将它们单独保存在存根中:

  • 您希望保持代码Python2的兼容性,并且不喜欢# type: ...注释语法
  • 您将函数注释用于其他内容,但仍然希望使用类型提示。
  • 您正在将类型提示添加到现有的代码库中,并希望尽量减少现有文件中的代码搅动。
票数 69
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59051631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档