input_output_history
输入/输出历史
Section titled “输入/输出历史”IPython 会详细记录你在会话期间输入的命令及其产生的结果。此历史记录对于回顾你的工作、回想以前的命令和重复使用结果来说是无价的。
访问以前的命令
Section titled “访问以前的命令”访问以前命令最简单的方法是在 IPython 控制台或 Jupyter Cell 中使用上下箭头键。这会在当前会话中滚动显示已执行的命令历史记录。
IPython 还提供了更有结构化的方式来访问历史记录:
In 对象及相关变量
Section titled “In 对象及相关变量”IPython 将所有之前的输入(你键入的代码)存储在一个类似列表的对象 In 中。你可以使用其单元格编号(In[ ] 中显示的数字)来访问特定的输入。注意,In[0] 通常是一个空字符串。
In [1]: message = "Hello IPython"
In [2]: x = 10
In [3]: y = 20
In [4]: x + yOut[4]: 30
In [5]: In[1]Out[5]: 'message = "Hello IPython"'
In [6]: In[1:4] # 切片表示法可用Out[6]: ['message = "Hello IPython"', 'x = 10', 'y = 20']对于最后三个输入,还有一些简写变量:
_i:上一个输入。_ii:上上一个输入。_iii:上上上一个输入(前两个命令之前的输入)。
In [7]: _i # 单元格 [6] 的输入Out[7]: 'In[1:4] # Slice notation works'
In [8]: _ii # 单元格 [5] 的输入Out[8]: 'In[1]'
In [9]: _iii # 单元格 [4] 的输入Out[9]: 'x + y'此外,_ih(输入历史)是一个包含所有输入历史(作为字符串)的列表。
%history 魔术命令
Section titled “%history 魔术命令”%history(或 %hist)魔术命令提供输入历史的格式化视图。
In [10]: %history# 输出:# message = "Hello IPython"# x = 10# y = 20# x + y# In[1]# In[1:4] # 切片表示法可用# _i # 单元格 [6] 的输入# _ii # 单元格 [5] 的输入# _iii # 单元格 [4] 的输入# %history
In [11]: %history -n 4-6 # 显示行号 4 到 6 的历史记录# 输出:# 4: x + y# 5: In[1]# 6: In[1:4] # 切片表示法可用访问以前的输出
Section titled “访问以前的输出”IPython 还会缓存已执行单元格的结果(输出)。
Out 对象及下划线变量
Section titled “Out 对象及下划线变量”输出存储在一个名为 Out 的类似字典的对象中,其中键是输出单元格编号(Out[ ]),值是结果。请注意,不产生输出的命令(例如赋值)在 Out 中不会有条目。
# 接上一个例子...In [12]: OutOut[12]:{4: 30, 5: 'message = "Hello IPython"', 6: ['message = "Hello IPython"', 'x = 10', 'y = 20'], 7: 'In[1:4] # Slice notation works', 8: 'In[1]', 9: 'x + y'}与输入类似,对于最后三个输出,也有一些简写变量:
_:上一个输出。__:上上一个输出。___:上上上一个输出(前两个结果之前的输出)。
In [14]: result = x * yOut[14]: 200
In [15]: _ # 上一个输出(来自单元格 14)Out[15]: 200
In [16]: print(f"The last result was: {_}")# 输出: 上一个结果是: 200
In [17]: __ # 来自单元格 13 的输出Out[17]: 30
In [18]: ___ # 来自单元格 12 的输出Out[18]:{4: 30, 5: 'message = "Hello IPython"', 6: ['message = "Hello IPython"', 'x = 10', 'y = 20'], 7: 'In[1:4] # Slice notation works', 8: 'In[1]', 9: 'x + y'}你还可以使用 _N 访问输出,其中 N 是输出单元格编号(例如,_4 等效于 Out[4])。
In [19]: _4Out[19]: 30_oh(输出历史)变量是 Out 字典的另一个名称。
输入/输出历史对于以下方面非常有用:
- 调试(Debugging):轻松检查以前的输入和输出。
- 重新运行命令:使用上下箭头或
%history。 - 重复使用结果:将存储在
_、__、Out[N]中的输出分配给新变量。 - 构建新命令:在新表达式中组合以前的输入/输出。
了解如何访问和利用会话历史记录是高效使用 IPython 和 Jupyter 的关键。