有点奇怪的问题;它出现在一个公开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上找到了这个答案。我在文本编辑器中打开一个文件,并在正确的目录中使用终端,然后将其用作模拟答案的暂存器。