- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试了解 python 3 的较低级别实现。 subprocess module 使用一个名为 _posixsubprocess 的模块。 。我尝试在系统中查找该模块的位置,发现它是一个 stub 文件。
有人可以指导我吗,因为我不知道什么是 stub 文件以及它们如何在较低级别实现?
最佳答案
您引用的文件是用 C 编写的 Python 模块。它不是“ stub ”文件。真正的实现可以在 stdlib 中找到 Modules/_posixsubprocess.c
。您可以通过查看 Building C and C++ Extensions 来了解如何编写 C/C++ 扩展。 。这应该可以帮助您理解 _posixsubprocess.c
中的代码。
为了向该文件(用 C 编写的“扩展模块”)添加类型提示,类型提示将添加到扩展名为 .pyi 的“ stub ”文件中
.
该文件可以在 the typeshed 中找到这是 stub 文件的集合。 Typeshed 还包含第三方模块的 stub ,这是历史遗留的。从 PEP-561 开始就不再需要了已被采纳。
stub 文件包含普通 Python 模块的类型提示信息。完整的官方文档可以找到 in the section about stub-files in PEP-484 .
例如,如果您有一个如下所示的 Python 模块 mymodule.py
:
def myfunction(name):
return "Hello " + name
然后您可以通过 stub 文件 mymodule.pyi
添加类型提示。请注意,这里的省略号 (...
) 是语法的一部分,因此下面的代码块真正显示了完整的文件内容:
def myfunction(name: str) -> str: ...
它们看起来与 C 头文件非常相似,因为它们只包含函数签名,但它们的使用完全是可选的。
您还可以直接在 .py
模块中添加类型提示,如下所示:
def myfunction(name: str) -> str:
return "Hello " + name
但在某些情况下,您希望将它们单独保存在 stub 中:
# type: ...
注释语法关于python - python 中 stub 文件 (.pyi) 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59051631/
它在 PyCharm 2016 中有效,但在 PyCharm 2017 中无效: “解决方案”:PyCharm 2017.2.x 支持 NamedTuple 来自 typing 并且我不需要再使用 .
如何自动创建 pyi 的样板代码文件? 我想创建一个 pyi pep484 中描述的类型提示文件其中包含所有方法名称。 我不想要魔法。我想在自动创建文件后添加类型信息。 我想避免复制+粘贴工作。 目标
你可以使用mypy的stubgen.py或其他工具 generate .pyi files automatically ,但 stubgen 包含检查 stub 文件准确性的附加建议。 如果我自动生成
在Python中,.pyi扩展名中的“i”代表什么? 在 PEP-484 ,它提到 .pyi 是“ stub 文件”,但没有关于扩展的助记符帮助。那么“i”是否意味着“包括”? “执行”? “接口(i
我使用 C++ 和 pybind11 构建了一个已编译的 Python 扩展(.pyd 文件)。我想为我的 .pyd 文件生成一个 Python 接口(interface) .pyi 文件。 有几个类
我正在尝试了解 python 3 的较低级别实现。 subprocess module 使用一个名为 _posixsubprocess 的模块。 。我尝试在系统中查找该模块的位置,发现它是一个 stu
在 Python 3 中,类型提示允许使用第三方工具,例如 mypy检查类型;然而,我发现类型检查语法与程序注释一起有点难看。使用 mypy,可以将 stub 函数和方法放入与 .py 文件位于同一目
我正在将 pylance 用于 vs 代码,它工作得非常好,除了因为我使用它,当我尝试从已安装的库中检查代码时,我只能访问 stub ,我认为是由 pylance 生成的。 例如,显示的有关函数的信息
在 VS Code 中,我尝试导入一个名为 foo.py 的模块,该模块具有类型提示 stub file foo.pyi。我想根据 .pyi 文件中的类型提示获得代码自动完成,如 PyCharm do
我想获取函数或类方法的注释。如果类型提示写在源代码中,那么我可以通过获取属性__annotations__来获取类型。 def hoge(n: int): ... print(hoge.__annot
当我在 PyCharm 中按住 ctrl 并单击导入名称时,它通常会将我带到 stub 文件而不是源文件。 例如,在 ssl 名称之后: import ssl 会带我去这样的地方: ~/pycharm
我是 Python 注释的新手(类型提示)。我注意到 pyi 中的许多类定义文件继承到 Generic[_T] , 和 _T = TypeVar('_T') . 我很困惑,_T 是什么意思?这里的意思
我是一名优秀的程序员,十分优秀!