ipython如何执行多条历史记录行

wis*_*wit 24 python ipython

在ipython中,我们可以使用

_ih[32:39] 
Run Code Online (Sandbox Code Playgroud)

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

sso*_*ler 22

您可以使用以前的会话执行代码%recall.见%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
Run Code Online (Sandbox Code Playgroud)

  • 还可以尝试“重新运行”而不是“召回”https://github.com/ipython/ipython/issues/9303 (3认同)

dre*_*old 17

我使用列表表示法:

exec In[34:36]
Run Code Online (Sandbox Code Playgroud)

此外,如果您使用编辑功能编辑块,则Out列表中将包含您的代码,因此:

exec Out[35]
Run Code Online (Sandbox Code Playgroud)

而我最喜欢的:

edit In[34:38]
Run Code Online (Sandbox Code Playgroud)

因为我是一个胖胖的傻瓜,在第一次尝试时很难做到这一点.

  • 这是一个巨大的福音,它**在iPython> 3.0上工作; `exec`是一个函数,所以它是`exec(In [34:36])`等. (7认同)
  • 我试过你的建议来编辑历史中的代码.对我来说(ipython 0.12)你的语法只适用于**单**输入行:`edit In [13]`.它总是在多个输入行上失败:`edit In [34:38]`.取而代之的是"编辑34-38". (2认同)

Chr*_*enz 11

在最新版本的iPython中,您使用重新运行魔术命令:

%rerun 32:39

该命令的文档:http://ipython.readthedocs.io/en/stable/interactive/magics.html#magic-rerun


Dav*_*rby 5

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

%macro foo 32-38
foo
Run Code Online (Sandbox Code Playgroud)

如果要多次执行同一组行,这非常有用.这些行也不需要是顺序的或顺序的:

%macro bar 38 37 32-36 42
Run Code Online (Sandbox Code Playgroud)

  • 在新版本的IPython中,您还可以执行`%rerun 32-38`直接运行它们,或者如果您想在运行之前调整它们,则"%召回32-38". (4认同)