1

这是一个有点奇怪的问题。它是在一个公开 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,由于缩进不当,我会收到语法错误。(否则我将打印放在循环中并在每次迭代时执行。)

但是如果我按回车键进入下一行,循环会立即运行,我必须等待它完成,或者在可能出现的输出面前输入打印命令,等等。

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

是否存在对 Pythonic 语法的丑陋滥用,会达到我和我的同事想不到的伎俩?或者推荐一种避免问题的方法,同时仍然可以轻松地将临时交互式查询组合在一起?

感谢您的任何指示。

4

2 回答 2

1

不漂亮,但这应该工作:

>>> mygen = slow_generator_of_giant_list()
>>> try:
...     while True: stats = update(stats, mygen.next())
... except StopIteration:
...     print stats
...
于 2012-05-02T21:56:38.857 回答
0

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

保存文件并运行它并不费力。只要您使用它,您只需保留它。

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

于 2012-05-02T21:29:45.293 回答