python - reload(sys) 导致后续执行丢失其 `Out[n]:` 标记

标签 python ipython

我刚刚注意到这种与 ipython shell 的交互式使用有关的特殊行为。我认为以下示例非常直接地说明了我的意思:

调用一个新的ipython session ;执行以下语句,注意在reload(sys)语句后丢失了Out[n]:标签。

In [1]: import sys

In [2]: 1
Out[2]: 1

In [3]: reload(sys)
<module 'sys' (built-in)>

In [4]: 1
1

版本信息是 Python 2.7.10 和 IPython 2.4.1,Fedora 22。

这是 CPython 和/或 IPython 的错误吗?如果不是,为什么会出现这种行为?

最佳答案

答案就在ipython的sys.displayhook里,和系统版本不一样。来自 help(sys):

Dynamic objects:

[...]

displayhook -- called to show results in an interactive session

当你执行 reload(sys) 时,它会引入系统版本的 sys,而不是 ipython 的,因此它没有补丁版本:

In [1]: import sys

In [2]: print sys.displayhook
<IPython.core.displayhook.DisplayHook object at 0x105bc1dd0>

In [3]: reload(sys)
<module 'sys' (built-in)>

In [4]: print sys.displayhook
<built-in function displayhook>

您可以在 core/displayhook.py 中查看它的代码在 ipython 代码库中。如果您真的关心的话,您甚至可以解决它:

In [1]: import sys

In [2]: print sys.displayhook
<IPython.core.displayhook.DisplayHook object at 0x10ba2ddd0>

In [3]: dh = sys.displayhook

In [4]: reload(sys)
<module 'sys' (built-in)>

In [5]: print sys.displayhook
<built-in function displayhook>

In [6]: 2
2

In [7]: sys.displayhook = dh

In [8]: 2
Out[8]: 2

关于python - reload(sys) 导致后续执行丢失其 `Out[n]:` 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32536944/

相关文章:

python - 在 IPython 中执行 .py 文件

python - 高效地将大型 Pandas 数据帧写入磁盘

python - 获取其他模块中 tkinter 实例的参数

python - 如何将 IPython 笔记本转换为 PDF 和 HTML?

python - 系统退出 : 2 error when calling parse_args() within ipython

python - 在 OSX Snow Leopard 上安装 IPython 以使用非默认 python 版本(即 python2.6.6/python2.7)

python - %在 IPython 中运行 Python 函数

python - Pandas 多索引渲染

python - 使用 Flask 和 Ajax 将数据从 html 传递到 mysql 数据库

python - cgi-bin中运行python的安全注意事项