运行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()
)。
答案 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中描述的文档。