在IPython中存储宏
根据文档,我应该能够定义宏并存储它。然后,宏将在下次启动IPython shell时可用。但是,它不起作用:在IPython中存储宏,ipython,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 "Foobarbatbizbuzzbon
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外壳时,没有宏:
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]: []
[1]中的:foo
---------------------------------------------------------------------------
NameError回溯(最近一次呼叫上次)
在()
---->一福
NameError:未定义名称“foo”
在[2]中:%宏
输出[2]:[]
有人知道为什么这样不行吗?我在几个不知名的地方找到了答案 首先,在$HOME/.ipython中的自述文件中,它说,“有关配置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`
此配置文件的旧文档如下所示:
. 最新的(截至2020年1月)出现在关于的改进章节中
最后,我在[链接更新,2020年1月]的文档中找到了我的答案:
%存储轻量级持久性的魔力。存储变量、别名
还有IPython数据库中的宏。要自动恢复存储的
变量启动时,将其添加到ipython_config.py文件:
再加上这个,重启IPython,砰的一声!这是我的宏。酷 我必须承认,有时为ipython找到一个好的文档是一场噩梦(从基础上讲)。这个交互式控制台似乎是为真正的编程大师而创建的。至少,当我试图解决一个简单的问题,比如保存一个变量供以后使用时,我会有这样的感觉……这在matlab中比简单得多 但要回答你的问题。。。尝试正常打开ipython,只需键入ipython,然后写入%store-r 它应该用原始名称恢复您的数据。我仍然不知道如何将变量存储到文件中或仅恢复我想要的变量。顺便说一句,要知道存储变量的名称,请键入%store
希望对你有用 除了在shell中定义宏然后将其存储外,还可以在启动文件中定义宏。例如,可以将以下行放入IPYTHONDIR/profile\u default/ipython\u config.py中:
get_ipython().define_macro('foo','print "Foobarbatbizbuzzbonk"')
如果要为magic命令定义宏,可以使用以下内容:
get_ipython().define_macro('clr',"""get_ipython().magic(u'%reset -sf')""");
我还没有弄清楚如何为带有接受参数的选项的magic命令定义宏(例如,键入'rn tmp'而不是'%run-I tmp'以在ipython的命名空间中运行文件tmp.py)。这是更好的答案,因为OP只要求宏是持久的<代码>%store还将使变量持久化,这有时会给我带来一些令人不快的惊喜。要实现这一点,您必须首先运行
ipython--init
,它将创建您的个人配置文件(默认配置文件)。通过发出ipython locate
来查找您的IPYTHONDIR。注意,它是c.StoreMagics.autorestore=True(至少在ipython 7.11.1中是这样)
get_ipython().define_macro('clr',"""get_ipython().magic(u'%reset -sf')""");