在IPython中存储宏

时间:2013-07-17 07:06:25

标签: ipython

根据文档,我应该能够定义一个宏并存储它。然后,下次启动IPython shell时,宏将可用。但是,它不起作用:

In [4]: print "Foobarbatbizbuzzbonk"
Foobarbatbizbuzzbonk

In [5]: %macro foo 4
Macro `foo` created. To execute, type its name (without quotes).
=== Macro contents: ===
print "Foobarbatbizbuzzbonk"

In [6]: %store foo
Stored 'foo' (Macro)

In [7]: quit()

当我再次启动IPython shell时,没有宏:

In [1]: foo
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-d3b07384d113> in <module>()
----> 1 foo

NameError: name 'foo' is not defined

In [2]: %macro
Out[2]: []

有谁知道为什么这不起作用?

3 个答案:

答案 0 :(得分:9)

我在几个不起眼的地方找到了答案。

首先,在$ HOME / .ipython中的README中,它说:“有关配置IPython的更多信息,请执行:ipython config -h

这样做会产生一系列帮助,包括以下建议:

To initialize a profile with the default configuration file, do::

  $> ipython profile create

and start editing `IPYTHONDIR/profile_default/ipython_config.py`
好的,太好了。做过某事。现在,Configuring the ipython command line application中介绍了此文件中的内容。但是,这份文件没有提到%store。

最后,我在配置和自定义中找到了答案,在与IPython 捆绑在一起的扩展程序下面,您可以在其中找到条目storemagic,其中包含:

  

%存储轻量级持久性的魔力。存储变量,别名   和IPython数据库中的宏。自动恢复存储   启动时的变量,将其添加到ipython_config.py文件中:

c.StoreMagic.autorestore = True

添加,重启IPython并爆炸!有我的宏。酷!

答案 1 :(得分:7)

作为在shell中定义宏然后存储它的替代方法,您可以在启动文件中定义宏。例如,您可以将以下行放入IPYTHONDIR / profile_default / ipython_config.py中:

get_ipython().define_macro('foo','print "Foobarbatbizbuzzbonk"')

如果要为魔术命令定义宏,可以使用以下内容:

get_ipython().define_macro('clr',"""get_ipython().magic(u'%reset -sf')""");

我还没有弄清楚如何使用可接受参数的选项定义魔术命令的宏(例如,输入'rn tmp'而不是'%run -i tmp'来运行ipython中的文件tmp.py命名空间)。

答案 2 :(得分:4)

我必须承认,有时为ipython找到一份好的文档是一场噩梦(基础知识)。看起来这个交互式控制台是为真正的编程大师而创建的。至少,这是我在尝试解决一个简单的问题时所感受到的,比如保存变量以供后用...在matlab中更简单。

但要回答你的问题...尝试打开ipython,只需输入ipython然后写%store -r

它应该使用原始名称恢复您的数据。我仍然不知道使用将变量存储到文件中或仅恢复我想要的变量。 BTw,要知道存储变量的名称,请键入%store。

希望它适合你。