Skip to content

core_ipython_features

核心 IPython 功能(补全、自省)

Section titled “核心 IPython 功能(补全、自省)”

除了基本的代码执行,IPython 还提供了强大的功能,可以显著提高交互式会话期间的生产力。其中两个基本功能是 Tab 补全和对象自省。

IPython 提供了上下文感知的代码元素补全功能,通过按 Tab 键即可实现。这适用于:

  • 变量名: 补全命名空间中已定义的变量名称。
  • 关键字: 补全 Python 关键字(如 import, for, def)。
  • 对象属性和方法: 在输入对象名称后加上点 (.),然后按 Tab 会显示该对象的可用属性和方法列表。
  • 函数关键字参数: 在函数调用内部,Tab 可以建议可用的关键字参数。
  • 文件路径: 输入看起来像路径的字符串时,Tab 会尝试补全文件和目录名称。
  • 魔术命令: 在输入 % 后,可以补全魔术命令名称。

示例:

In [1]: my_variable = 100
In [2]: import numpy as np
In [3]: my_arr = np.array([1, 2, 3])
# 在 IPython cell 中尝试以下命令:
# my_var<Tab> --> 补全为 my_variable
# np.ar<Tab> --> 建议 array, arange 等
# my_arr.<Tab> --> 显示 .sum(), .mean() 等方法,以及 .shape, .dtype 等属性
# np.array? --> (参见下面的对象自省)
# np.array(obj<Tab> --> 建议 object=..., dtype=..., copy=..., 等参数
# %his<Tab> --> 补全为 %history

Tab 补全极大地减少了输入,有助于防止拼写错误,并充当了一种发现对象功能(capabilities)的机制。

自省 (Introspection) 是指在运行时检查 Python 对象属性的能力。IPython 提供了一种方便的语法,使用问号(?)来访问对象的文档和信息。

  • object?: 显示对象的信息,如类型、文档字符串(docstring)、函数签名(如果适用)和文件位置。
  • object??: 提供更详细的信息,包括对象的源代码(如果可用,例如对于在 Python 中定义的函数或类)。

这适用于变量、函数、模块、类、方法等。

In [4]: import pandas as pd
# 自省变量
In [5]: my_arr?
# 输出:
# Type: ndarray
# String form: [1 2 3]
# Length: 3
# ... (更多信息)
# 自省函数
In [6]: pd.read_csv?
# 输出:显示函数签名、详细的文档字符串(解释参数、示例等)
# 自省模块
In [7]: pd?
# 输出:显示模块文档字符串、文件路径等
# 获取函数源代码 (如果可用)
In [8]: def my_function(a, b=1):
...: """This is my custom function."""
...: return a + b
...:
In [9]: my_function??
# 输出:
# Signature: my_function(a, b=1)
# Docstring: This is my custom function.
# Source:
# def my_function(a, b=1):
# """This is my custom function."""
# return a + b
# File: ...
# Type: function

通配符自省:您还可以结合 ? 使用通配符(*)来搜索命名空间。

In [10]: *Warning? # 查找所有以 'Warning' 结尾的名称
# 输出:UserWarning, DeprecationWarning, RuntimeWarning, etc.

使用 ? 和 ?? 进行自省对于快速查看如何使用函数、了解对象是什么,甚至无需离开交互式会话即可查看源代码,都非常有用。它极大地有助于探索和调试。

Tab 补全和对象自省这两个核心功能,是 IPython 和 Jupyter 提供流畅高效工作流程的基础。