news 2026/5/13 3:54:09

python的 “桩代码“(stub)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python的 “桩代码“(stub)

"桩代码"(stub)是**假实现、占位符**,不是真正的功能代码。

## 本质

| 类型 | 作用 | 例子 |
|------|------|------|
| **真实实现** | 实际运行的逻辑 | C 语言写的 `enumerate` 迭代器 |
| **桩代码(stub)** | 给类型检查工具/IDE 看的"说明书" | `.pyi` 文件里的假函数 |

## enumerate 的真实 vs 桩代码

```
Python 源码结构:
Lib/
├── enum.py ← 真实实现(运行时执行)
└── typeshed/
└── stdlib/
└── builtins.pyi ← 桩代码(给 mypy/IDE 看)
```

**真实实现**(C 层,简化示意):
```python
# 这是 C 写的,实际在 python.exe 里
class enumerate:
def __init__(self, iterable, start=0):
self.iterable = iterable
self.start = start
self.index = start

def __iter__(self):
return self

def __next__(self):
# ... 真正的迭代逻辑 ...
pass
```

**桩代码**(`.pyi` 文件,纯类型提示):
```python
# builtins.pyi —— 没有函数体,只有类型签名
class enumerate(Iterator[tuple[int, T]], Generic[T]):
def __init__(self, iterable: Iterable[T], start: int = 0) -> None: ...
def __iter__(self) -> Self: ...
def __next__(self) -> tuple[int, T]: ...
```

## 为什么要桩代码?

| 场景 | 原因 |
|------|------|
| **C 扩展模块** | 真实代码是 `.so`/`.pyd` 二进制,Python 解析器看不懂 |
| **类型检查** | `mypy` 需要知道参数类型、返回值类型 |
| **IDE 提示** | PyCharm/VSCode 需要知道 `enumerate` 返回 `tuple[int, T]` |
| **跨平台** | 不同系统 C 实现不同,桩代码统一接口描述 |

## 一句话

> **桩代码是"类型说明书"**,没有真实逻辑,只为告诉工具:"这个函数长什么样、接受什么参数、返回什么类型"。真实跑的还是 C 写的二进制。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/13 3:54:05

让FLV在浏览器中重生:flv.js如何打破Flash的枷锁

让FLV在浏览器中重生:flv.js如何打破Flash的枷锁 【免费下载链接】flv.js HTML5 FLV Player 项目地址: https://gitcode.com/gh_mirrors/fl/flv.js 你是否还记得那些年,网页视频必须依赖Flash插件的时代?🕰️ 当Adobe宣布停…

作者头像 李华
网站建设 2026/5/13 3:52:43

Claude+Playwright+MCP:AI驱动自动化测试的新架构与实践

1. 项目概述:当Claude遇上Playwright,自动化测试的智能新范式最近在GitHub上看到一个挺有意思的项目,叫terryso/claude-code-playwright-mcp-test。光看这个名字,你可能觉得这又是一堆技术名词的堆砌,但如果你恰好是搞…

作者头像 李华
网站建设 2026/5/13 3:50:41

3步掌握透明悬浮浏览器:终极多任务效率提升指南

3步掌握透明悬浮浏览器:终极多任务效率提升指南 【免费下载链接】glass-browser A floating, always-on-top, transparent browser for Windows. 项目地址: https://gitcode.com/gh_mirrors/gl/glass-browser 你是否厌倦了在多个窗口间频繁切换?是…

作者头像 李华
网站建设 2026/5/13 3:44:04

第五:BurpSuite功能使用-BurpSuite·代理功能

一.代理:传递信息的角色,可以篡改、重复发送请求等操作 1.Proxy-代理模块2.连接手机抓包教程:https://www.jianshu.com/p/ce6aa44c9d2f3.设置监听器规则-Option二.截断-Intercept 1.功能:拦截浏览器和服务器之间的网络报文2.后续行…

作者头像 李华