Shift+Tab是最常用、最即时的查看方式,光标停在函数名右侧或括号内按Shift+Tab弹出内联文档,连续按可切换详细程度,支持四档展开;func?和func??分别显示结构化元信息与源码,help()适合查嵌套属性但格式简陋。

Shift+Tab 是最常用、最即时的查看方式
光标停在函数名右侧或括号内(比如 pd.read_csv 后面、或 pd.read_csv(|) 的竖线位置),按 Shift+Tab 就能弹出内联文档窗口。它不依赖执行,也不需要 import 成功——只要符号已加载进当前 namespace,就能响应。
连续按 Shift+Tab 可切换详细程度:第一次显示精简签名(如 read_csv(filepath_or_buffer, sep=',', ...));第二次展开参数类型和简要说明;第三次拉出完整 docstring 摘要(含返回值);第四次全屏打开富文本帮助页(支持 markdown 渲染、代码块高亮、超链接跳转)。
常见卡点:
- 没反应?确认光标确实在函数名「右侧」或括号「内部」,不在字符串里、注释里、引号中间
- 只显示
Signature: unknown?该函数可能没绑定到变量(比如写错名、拼写错误、未 import)、或来自 C 扩展模块(如numpy.ndarray.sum的部分方法) - 文档是英文?右上角有
^按钮可展开,旁边↗图标能新开标签页,方便复制到翻译工具
函数名后加 ? 或 ?? 直接看源码级信息
func? 等价于 %pinfo func,输出结构化元信息:签名、解析后的参数表(按 Google/Numpy 格式提取)、定义文件路径、行号、所属类。对 pandas、scikit-learn 这类文档规范的库效果最好。
func?? 在 ? 基础上叠加源码展示——自动绕过装饰器包装层,高亮核心逻辑,保留原始缩进和注释。但前提是源码可访问(纯 Python 实现的函数才有效;np.array 这类 C 实现会提示 No source found)。
自定义函数要注意:
- 没写
"""docstring"""?func?里参数表会为空,只显示签名 - 写了 docstring 但没用
Args:/Returns:分段?Jupyter 无法自动解析成表格,仍显示为一段文字 - 用了
@lru_cache或@property???会跳过装饰器,直接定位到被包裹的原始函数体
help() 函数适合嵌套对象或临时查漏补缺
help(func) 是标准 Python 内置方式,在 Jupyter 里也能用,但输出格式是纯文本、不可折叠、不支持 markdown 渲染,且必须先 import 成功才能调用。相比 ? 和 Shift+Tab,它更“笨重”,但有个不可替代的场景:查嵌套属性。
比如你想看 pandas.DataFrame.groupby 方法的文档,但 df.groupby? 可能因 df 未定义而报错;这时可以直接 help(pd.core.frame.DataFrame.groupby) ——绕过实例,直击类定义。
性能影响很小,但注意:
-
help()会触发一次对象 introspection,对大型对象(如未加载完成的 Dataset)可能轻微卡顿 - 输出中出现
Help on built-in function?说明是 C 实现,源码不可见,只能靠 docstring 理解行为 - 别写
help(func())(带括号)——那是查返回值的 help,不是查函数本身
容易被忽略的细节:文档来源和更新滞后问题
Jupyter 的文档数据来自运行时环境中的实际对象,不是从官网实时拉取的。这意味着:
- 你装的是旧版 pandas,
pd.read_csv?显示的就是旧版参数(比如没有encoding_errors参数),哪怕官网文档已更新 - 修改了自定义函数的 docstring 但没重新运行定义单元格?
func?仍显示旧内容 - 使用
import *导入时,某些符号可能被覆盖或未正确注入 namespace,导致Shift+Tab失效
最稳妥的做法:确保函数已正确定义并执行过,再用 Shift+Tab 或 ? 查;怀疑文档陈旧?先 !pip show package_name 确认版本,再比对对应版本的官方文档。


















