如何配置 IPython 以与普通 Python REPL 相同的方式执行单元块?
How to configure IPython to execute cell blocks the same way as a plain Python REPL does?
原版 Python 回复:
>>> 'na'
'na'
>>> for i in range(4):
... f'{_+_}'
... else:
... 'batman'
...
'nana'
'nananana'
'nananananananana'
'nananananananananananananananana'
'batman'
>>>
IPython 具有相同解释器的 REPL:
>>> 'na'
'na'
>>> for i in range(4):
... f'{_+_}'
... else:
... 'batman'
...
>>> _
'na'
这个差异是, and unrelated to the display hook。是否可以像普通 Python REPL 那样将 IPython 配置为 compile/exec 单元块?我希望 IPython 不会干扰或修改此类底层运行时机制。
通过 %config
魔术命令将 InteractiveShell.ast_node_interactivity
设置为 'all'
:
%config InteractiveShell.ast_node_interactivity='all'
或在您的 ipython_config.py
c.InteractiveShell.ast_node_interactivity = 'all'
这将导致 IPython 在 'single'
模式下编译所有内容,即触发 sys.displayhook
的模式,而不是 'exec'
模式,后者不使用 sys.displayhook
.
InteractiveShell.ast_node_interactivity
的可能设置目前为
'all'
: 在'single'
模式下编译所有内容。
'last'
:以'single'
模式编译单元格的最后一个(简单或复合)语句。在
等情况下不同于 'all'
In [7]: for i in range(5):
...: i
...: for i in range(3):
...: i
...:
Out[7]: 0
Out[7]: 1
Out[7]: 2
'all'
会从两个循环中打印出 i
的值。
'last_expr'
:如果该语句是表达式语句,则以 'single'
模式编译单元格的最后一条语句。这是 IPython 的默认值。
'none'
: 在'exec'
模式下编译所有内容。
'last_expr_or_assign'
:类似于'last_expr'
,但如果最后一条语句是赋值语句,则执行一些额外的 AST 转换以打印赋值的值:
In [2]: xyz = "something else"
Out[2]: "something else"
原版 Python 回复:
>>> 'na'
'na'
>>> for i in range(4):
... f'{_+_}'
... else:
... 'batman'
...
'nana'
'nananana'
'nananananananana'
'nananananananananananananananana'
'batman'
>>>
IPython 具有相同解释器的 REPL:
>>> 'na'
'na'
>>> for i in range(4):
... f'{_+_}'
... else:
... 'batman'
...
>>> _
'na'
这个差异是
通过 %config
魔术命令将 InteractiveShell.ast_node_interactivity
设置为 'all'
:
%config InteractiveShell.ast_node_interactivity='all'
或在您的 ipython_config.py
c.InteractiveShell.ast_node_interactivity = 'all'
这将导致 IPython 在 'single'
模式下编译所有内容,即触发 sys.displayhook
的模式,而不是 'exec'
模式,后者不使用 sys.displayhook
.
InteractiveShell.ast_node_interactivity
的可能设置目前为
'all'
: 在'single'
模式下编译所有内容。
等情况下不同于'last'
:以'single'
模式编译单元格的最后一个(简单或复合)语句。在'all'
In [7]: for i in range(5): ...: i ...: for i in range(3): ...: i ...: Out[7]: 0 Out[7]: 1 Out[7]: 2
'all'
会从两个循环中打印出i
的值。'
last_expr'
:如果该语句是表达式语句,则以'single'
模式编译单元格的最后一条语句。这是 IPython 的默认值。'none'
: 在'exec'
模式下编译所有内容。'last_expr_or_assign'
:类似于'last_expr'
,但如果最后一条语句是赋值语句,则执行一些额外的 AST 转换以打印赋值的值:In [2]: xyz = "something else" Out[2]: "something else"