ホームページ >バックエンド開発 >Python チュートリアル >Python を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!
print
関数が日常生活で最も一般的に使用される関数であることは間違いありません。出力の書式設定であっても、デバッグ用の中間変数の出力であっても、はほとんどありません print
その仕事を受けることができません。
でも、Aちゃんは前回、print
に騙されそうになりました。
当初、コマンド ライン ガジェットの 1 つに進行状況表示機能を追加したかったので、threading
モジュールを使用して実装しました。マルチスレッド: 1 つのスレッドは実際のロジックの実行に使用され、もう 1 つのスレッドは現在の進行状況の出力に使用されます。
当社の
年間の使用に基づくコマンドの使用 行の経験上、通常、印刷の進行状況は行内に印刷されますが、Python の print
はデフォルトで最後に改行文字を印刷します。これは非常に見苦しいです。
幸いなことに、print
には、印刷の最後の文字を変更するインターフェイスも用意されています。これは、print
の end
パラメーターを指定することで変更できます。 print
の印刷結果。
そこで私は開始し、進行状況を出力する print("#")
呼び出しを print("#", end="" )
に変更しました。
次のように:
これが I になりますこの変更により、進行状況をリアルタイムで表示できなくなるという大きな問題が発生しました。
つまり、プログラムの実行中に、# 一つずつ出力される数字は、従順でかわいい
# 数字ではなく、プログラム全体が実行された後にコンソールにまとめて出力されます。
も醜くなりました。
#クリックしてドラッグして移動します 最初、Ajiang さんはマルチスレッドに問題があると考えていたため、さまざまな憶測を「裏付ける」ために愚かにもあらゆる情報を探していました。後から考えると、あまりにも愚かだったので、今でも笑いながら話しています。 実は、リアルタイム出力が表示できない理由は、I/O 操作を最小限に抑えるために、Python には出力文字をキャッシュするメカニズムがあります。文字列の終わり、改行文字、またはバッファーの強制的な更新に遭遇すると、バッファーは領域の内容が対応するストリームに出力されます。
print ごとにバッファーのリフレッシュがトリガーされていましたが、現在はバッファーのリフレッシュはトリガーできません。プログラムが終了するまで。
わかりました。問題が何であるかがわかったので、もう一度情報を検索しました。
sys.stdout.flush
print の後に、
sys.stdout.flush() がすぐに追加されました。
え?本当に良いのでしょうか?
以上がPython を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。