Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在IPython中存储宏_Ipython - Fatal编程技术网

在IPython中存储宏

在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

根据文档,我应该能够定义宏并存储它。然后,宏将在下次启动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外壳时,没有宏:

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')""");