Python REPL:提前发出命令,在区块后执行


这是一个

有点奇怪的问题;它出现在一个公开Python API的工具的上下文中,我们花了很多时间从REPL交互式查询。 导致问题的特定习语是这样的:

for var in slow_generator_of_giant_list():
    stats = update(stats, var)
print stats

要在 REPL 中输入此内容,我可以键入以下内容:

>>> for var in slow_generator_of_giant_list():
...    stats = update(stats, var)
...

如果我现在尝试键入print,则由于缩进不正确而出现语法错误。 (否则,我将打印放在循环中并在每次迭代中执行此操作。

但是,如果我按 Enter 转到下一行,循环会立即运行,我必须等待它完成,或者在面对可能的输出时键入 print 命令,等等。

显然,我可以定义一个包含上述内容的函数,无论如何都值得保存到文件中,但在一般情况下,我们正在动态构建这些函数,并且最好有一种方法来"调度"命令在 REPL 循环结束后运行。 在带有块分隔符的语言中,我当然可以将其放在结束分隔符(以及任何必要的语句分隔符(之后。 但是我和我的同事在试图在这里做类似的事情时被难住了。

是否有一种丑陋的 Python 语法滥用会做我和我的同事无法想到的技巧? 还是避免问题同时仍可轻松组合即席交互式查询的推荐方法?

感谢您的任何指示。

不漂亮,但这应该有效:

>>> mygen = slow_generator_of_giant_list()
>>> try:
...     while True: stats = update(stats, mygen.next())
... except StopIteration:
...     print stats
...

我只想说,你会发现不使用交互式shell更容易。

保存文件并运行它并不费力。只要你使用它,你只需要把它放在身边。

我实际上已经在SO上找到了这个答案。我在文本编辑器中打开一个文件,并在正确的目录中使用终端,然后将其用作模拟答案的暂存器。

最新更新