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、不適切なインデントが原因で構文エラーが発生します。(または、ループ内に印刷を配置し、すべての反復で実行します。)

しかし、Enter キーを押して次の行に移動すると、ループがすぐに実行され、ループが終了するまで待つか、印刷コマンドを入力して、出力が表示される可能性があるかどうかを確認する必要があります。

明らかに、上記を含む関数を定義できます。とにかくファイルに保存する価値があるかもしれませんが、一般的なケースでは、これらをオンザフライで構築しているため、コマンドを「スケジュール」する方法があると便利です。 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

これにはインタラクティブシェルを使用しない方が簡単だと思います。

ファイルを保存して実行するのはたいした手間ではありません。使用している間だけ保管する必要があります。

私は実際にこの回答をSOで見つけました。テキスト エディターでファイルを開いたままにし、ターミナルを適切なディレクトリに配置して、答えをモックアップするためのスクラッチパッドとして使用します。

于 2012-05-02T21:29:45.293 に答える