Python 我将介绍如何执行多个历史记录行

Python 我将介绍如何执行多个历史记录行,python,ipython,Python,Ipython,在ipython,我们可以使用 _ih[32:39] 显示32和39之间的历史记录行。如何直接执行这些历史记录行?使用exec语句: exec(_ih[32:39]) 您可以从以下行创建命名宏并执行它们: %macro foo 32-38 foo 如果要多次执行同一组行,这非常有用。此外,这些行不需要按顺序排列: %macro bar 38 37 32-36 42 我使用列表符号: exec In[34:36] 此外,如果您使用编辑功能编辑块,则输出列表中将包含您的代码,因此: ex

在ipython,我们可以使用

_ih[32:39] 

显示32和39之间的历史记录行。如何直接执行这些历史记录行?

使用
exec
语句:

exec(_ih[32:39])

您可以从以下行创建命名宏并执行它们:

%macro foo 32-38
foo
如果要多次执行同一组行,这非常有用。此外,这些行不需要按顺序排列:

%macro bar 38 37 32-36 42

我使用列表符号:

exec In[34:36]
此外,如果您使用编辑功能编辑块,则输出列表中将包含您的代码,因此:

exec Out[35]
我最喜欢的是:

edit In[34:38]
因为我是一个笨手笨脚的懒汉,很少能在第一次尝试时就做到正确。

try%recall,
选中

您可以在执行行之前编辑行,如下所示:

edit 1-5

显然,与德雷诺德回答中使用的列表符号相比,语法在某个时候发生了变化。

您可以使用
%recall
执行以前会话中的代码。请参阅
%recall
文档


在iPython的最新版本上,您可以使用重新运行magic comand:

%重新运行32:39


关于该命令的文档:

在新版本的IPython中,您也可以执行
%重新运行32-38
直接运行它们,或者
%在运行之前重新调用32-38
,如果您想调整它们。如果您创建宏,它是否在IPython会话中保持不变?我尝试了您的建议,从历史记录中编辑代码。对于我(ipython 0.12),您的语法只适用于单个输入行:
edit In[13]
。在多个输入行上总是失败:
在[34:38]中编辑。
。取而代之的是
编辑34-38
!已经有一段时间没有尝试过了,(显然)iPython 0.13也有同样的问题。。。谢谢你的提醒!有人告诉我最新情况吗?这页上的提示对我都不管用。我使用Python 2.7.Plus 1使用iPython 3.0.0,因为我也是“一个手指粗笨的懒汉,第一次尝试时很少能正确完成任务。”这是一个巨大的好处,它在iPython>3.0上确实有效
exec
是一个函数,因此它是
exec(在[34:36]中]
等。这是更新的链接:也可以尝试
rerun
而不是
recall
#Execute all code from previous session.
%recall ~1/

#Execute all code from two sessions previous the current session.
%recall ~2/

#Execute lines 1 to 5 from previous session.
%recall ~1/1-5