ホームページ >バックエンド開発 >Python チュートリアル >Python を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!
print
関数が日常生活で最も一般的に使用される関数であることは間違いありません。出力の書式設定であっても、デバッグ用の中間変数の出力であっても、はほとんどありません print
その仕事を受けることができません。
でも、Aちゃんは前回、print
に騙されそうになりました。
当初、コマンド ライン ガジェットの 1 つに進行状況表示機能を追加したかったので、threading
モジュールを使用して実装しました。マルチスレッド: 1 つのスレッドは実際のロジックの実行に使用され、もう 1 つのスレッドは現在の進行状況の出力に使用されます。
当社の
年間の使用に基づくコマンドの使用 行の経験上、通常、印刷の進行状況は行内に印刷されますが、Python の print
はデフォルトで最後に改行文字を印刷します。これは非常に見苦しいです。
幸いなことに、print
には、印刷の最後の文字を変更するインターフェイスも用意されています。これは、print
の end
パラメーターを指定することで変更できます。 print
の印刷結果。
そこで私は開始し、進行状況を出力する print("#")
呼び出しを print("#", end="" )
に変更しました。
次のように:
これが I になりますこの変更により、進行状況をリアルタイムで表示できなくなるという大きな問題が発生しました。
# 一つずつ出力される数字は、従順でかわいい
# 数字ではなく、プログラム全体が実行された後にコンソールにまとめて出力されます。
も醜くなりました。
I/O 操作を最小限に抑えるために、Python には出力文字をキャッシュするメカニズムがあります。文字列の終わり、改行文字、またはバッファーの強制的な更新に遭遇すると、バッファーは領域の内容が対応するストリームに出力されます。
print ごとにバッファーのリフレッシュがトリガーされていましたが、現在はバッファーのリフレッシュはトリガーできません。プログラムが終了するまで。
わかりました。問題が何であるかがわかったので、もう一度情報を検索しました。
sys.stdout.flush
print の後に、
sys.stdout.flush() がすぐに追加されました。
え?本当に良いのでしょうか?
print
の公式ドキュメントを確認してみましょう。そのプロトタイプは次のとおりです:
以下の説明によると、Python かどうかprint
の出力は、file
と flush
という 2 つのパラメーターに応じてバッファリングされます。
file
の種類によっては、sys.stdout
のようにバッファリングが必要な場合もありますが、sys.stderr
のようにバッファリングを必要としない種類もあります。
flush
パラメータの場合、値が False
(デフォルト) の場合、バッファリングするかどうかは file
に依存します。また、その値がTrue
、バッファは強制的にフラッシュされます。
呼び出し例の print
呼び出しを変更しましょう:
さらに、プログラムを呼び出すときに
-u オプションを追加する別の方法もあります。これにより、バッファのリアルタイム更新も実現できます。
概要
一般に、本物の Python プログラマーになりたい場合は、基本的な構文といくつかのコツをマスターするだけでは十分ではなく、Python 自体をある程度理解する必要があります。
結局のところ、剣士は自分の剣に精通していなければ、どうやって世界中を旅できるのでしょうか?
関連する無料学習の推奨事項:Python ビデオ チュートリアル
以上がPython を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。