gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:24:21 25 4
gpt4 key购买 nike

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

这个差异是apparently related to the mode in which IPython compiles code , 与 display hook 无关.是否可以将 IPython 配置为像普通 Python REPL 那样编译/执行单元 block ?我希望 IPython 不会干扰或修改此类底层运行时机制。

最佳答案

设置InteractiveShell.ast_node_interactivity设置为 'all',或者通过 %config 魔术命令:

%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 - 如何配置 IPython 以与普通 Python REPL 相同的方式执行单元 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54136057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com