これは少し奇妙な質問です。それはPython APIを公開するツールのコンテキストで出てきました。私たちはREPLからインタラクティブにクエリを実行するのに多くの時間を費やしています。問題の原因となる特定のイディオムは、このようなものです:Python 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構文の醜い乱用はありますか?また、アドホックな対話型クエリーを簡単に組み合わせて問題を回避するための推奨される方法はありますか?
ありがとうございます。
おかげで、 @ChristopheD。これは、遅いリスト生成関数が実際にジェネレータである場合に機能します。いくつかのケースでは残念ながら、リスト全体をまとめて一度に返す非常に遅い関数です。その場合、私は同じ問題に戻ります。ジェネレータが返るのを待ってからtryブロックを要求する方法はありません。 –