wim*_*wim 4 python ipython read-eval-print-loop
香草蟒蛇REPL:
>>> 'na'
'na'
>>> for i in range(4):
... f'{_+_}'
... else:
... 'batman'
...
'nana'
'nananana'
'nananananananana'
'nananananananananananananananana'
'batman'
>>>
Run Code Online (Sandbox Code Playgroud)
使用相同解释器的IPython REPL:
>>> 'na'
'na'
>>> for i in range(4):
... f'{_+_}'
... else:
... 'batman'
...
>>> _
'na'
Run Code Online (Sandbox Code Playgroud)
这种差异显然与IPython编译代码的模式有关,与显示钩子无关.是否可以将IPython配置为编译/执行单元格块,就像普通的Python REPL一样?我更喜欢IPython不会干扰或修改这样的底层运行时机制.
通过magic命令将InteractiveShell.ast_node_interactivity
设置设置为:'all'
%config
%config InteractiveShell.ast_node_interactivity='all'
Run Code Online (Sandbox Code Playgroud)
或在你的 ipython_config.py
c.InteractiveShell.ast_node_interactivity = 'all'
Run Code Online (Sandbox Code Playgroud)
这将导致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
Run Code Online (Sandbox Code Playgroud)
'all'
会打印i
两个循环的值.
' last_expr'
:'single'
如果该语句是表达式语句,则在模式下编译单元格的最后一个语句.这是IPython的默认值.
'none'
:在'exec'
模式下编译所有内容.
'last_expr_or_assign'
:喜欢'last_expr'
,但是如果最后一个语句是赋值语句,则执行一些额外的AST转换来打印赋值:
In [2]: xyz = "something else"
Out[2]: "something else"
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
107 次 |
最近记录: |