在Python中启用自动打印已评估的语句?

时间:2018-02-14 22:47:24

标签: python python-c-api

运行Python REPL时,发送到控制台的顶级语句会自动打印。例如,使用:

>>> x = 1
>>> x
1
>>> |

评估x的第二行导致值为'自动打印'但是,在其他上下文中评估x时,我们不会得到相同的行为 - 例如,如果我们使用exec

>>> exec('x')
>>> |

同样,使用eval()

>>> code = compile('x = 1; x', '<string>', 'exec')
>>> eval(code)
>>> |

有没有办法让Python以这种方式自动打印语句,就像它在REPL的顶级一样?

虽然这个问题直接描述了Python代码,但我也想知道是否可以使用Python C API实现这一点(例如使用PyRun_SimpleStringFlags())。

1 个答案:

答案 0 :(得分:0)

https://stackoverflow.com/a/29456463/1342082详细讨论了这一问题。特别是:

  

'single'是'exec'的有限形式,它接受包含单个语句的源代码(或多个语句用;分隔),如果最后一个语句是表达式语句,则生成的字节码也会打印值的repr该表达式的标准输出(!)。

因此,这种形式的模式将起作用:

>>> code = compile('x = 1; x', '<string>', 'single')
>>> eval(code)
1
>>> |

另请参阅https://docs.python.org/3/library/functions.html#eval中描述的文档。