Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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以与普通Python REPL相同的方式执行单元块?_Python_Ipython_Read Eval Print Loop - Fatal编程技术网

如何配置IPython以与普通Python REPL相同的方式执行单元块?

如何配置IPython以与普通Python REPL相同的方式执行单元块?,python,ipython,read-eval-print-loop,Python,Ipython,Read Eval Print Loop,香草Python REPL: >>> 'na' 'na' >>> for i in range(4): ... f'{_+_}' ... else: ... 'batman' ... 'nana' 'nananana' 'nananananananana' 'nananananananananananananananana' 'batman' >>> 具有相同解释器的IPython REPL: >>>

香草Python REPL:

>>> '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'

这种差异是,并且与环境无关。是否可以将IPython配置为像普通Python REPL那样编译/执行单元块?我希望IPython不会干扰或修改这些底层运行时机制。

通过
%config
魔术命令将设置设置为
'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\u node\u互动性的可能设置当前为

  • '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\u expr”
    :如果某个单元格的最后一条语句是表达式语句,则以
    “single”
    模式编译该语句。这是IPython的默认设置

  • 'none'
    :以
    'exec'
    模式编译所有内容

  • 'last\u expr\u或\u assign'
    :类似于
    'last\u expr'
    ,但如果最后一条语句是赋值语句,则执行一些额外的AST转换以打印赋值:

    In [2]: xyz = "something else"
    Out[2]: "something else"
    

这是什么魔法?!巨蟒是一种怪兽。斯奈克·凯斯喜欢下划线。iPython中的Under_分数重用以前的输出。
\u
也不会在循环中重新分配。它总是最后一个
Out[..]
值(而
\uuu
\uuuuu
是前2个值。请注意,在默认配置中(OP显然没有使用,但其他人可能会使用),它将在所有回显行的前面加上
Out[\35;]:
,这有点破坏了效果。在这种情况下,通过添加配置文件设置
c.TerminalInteractiveShell.prompts\u class='IPython.terminal.prompts.ClassicCompts',恢复到经典的Python提示符外观可能是个好主意。