reload(sys) 导致后续执行丢失它们的 Out[n]: 标签
reload(sys) cause subsequent executions lose their `Out[n]:` tag
我刚刚注意到这种与 ipython
shell 的交互使用相关的特殊行为。我认为以下示例非常直接地说明了我的意思:
调用新的 ipython
会话;执行以下语句,注意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。
这是CPythonand/orIPython的bug吗?如果不是,为什么会出现这种行为?
答案就在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>
您可以在 ipython 代码库的 core/displayhook.py 中查看它的代码。如果你真的关心的话,你甚至可以解决它:
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
IPython使用sys.ps1
value as the input prompt, and adds sys.ps3
for the output. To make displaying sys.ps3
on output work, sys.displayhook
已设置:
sys.displayhook
is called on the result of evaluating an expression entered in an interactive Python session. The display of these values can be customized by assigning another one-argument function to sys.displayhook
.
正在重新加载将挂钩重置为默认值 None
。
重置为:
from IPython import get_ipython
get_ipython().display_trap.set()
这比尝试预先存储 DisplayHook
实例更方便。
我刚刚注意到这种与 ipython
shell 的交互使用相关的特殊行为。我认为以下示例非常直接地说明了我的意思:
调用新的 ipython
会话;执行以下语句,注意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。
这是CPythonand/orIPython的bug吗?如果不是,为什么会出现这种行为?
答案就在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>
您可以在 ipython 代码库的 core/displayhook.py 中查看它的代码。如果你真的关心的话,你甚至可以解决它:
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
IPython使用sys.ps1
value as the input prompt, and adds sys.ps3
for the output. To make displaying sys.ps3
on output work, sys.displayhook
已设置:
sys.displayhook
is called on the result of evaluating an expression entered in an interactive Python session. The display of these values can be customized by assigning another one-argument function tosys.displayhook
.
正在重新加载将挂钩重置为默认值 None
。
重置为:
from IPython import get_ipython
get_ipython().display_trap.set()
这比尝试预先存储 DisplayHook
实例更方便。