ホームページ  >  記事  >  バックエンド開発  >  Python を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!

Python を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!

coldplay.xixi
coldplay.xixi転載
2020-09-29 18:01:222042ブラウズ

Python を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!

print 関数が日常生活で最も一般的に使用される関数であることは間違いありません。出力の書式設定であっても、デバッグ用の中間変数の出力であっても、はほとんどありません print その仕事を受けることができません。

でも、Aちゃんは前回、printに騙されそうになりました。

落とし穴はどこから来るのか

当初、コマンド ライン ガジェットの 1 つに進行状況表示機能を追加したかったので、threading モジュールを使用して実装しました。マルチスレッド: 1 つのスレッドは実際のロジックの実行に使用され、もう 1 つのスレッドは現在の進行状況の出力に使用されます。

Python を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!
クリックしてドラッグして移動します。

当社の

年間の使用に基づくコマンドの使用 行の経験上、通常、印刷の進行状況は行内に印刷されますが、Python の print

はデフォルトで最後に改行文字を印刷します。これは非常に見苦しいです。

幸いなことに、print には、印刷の最後の文字を変更するインターフェイスも用意されています。これは、printend パラメーターを指定することで変更できます。 printの印刷結果。

そこで私は開始し、進行状況を出力する print("#") 呼び出しを print("#", end="" ) に変更しました。

次のように:

Python を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!
クリックしてドラッグして移動します

これが I になりますこの変更により、進行状況をリアルタイムで表示できなくなるという大きな問題が発生しました。

Python を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!
#クリックしてドラッグして移動します
つまり、プログラムの実行中に、

# 一つずつ出力される数字は、従順でかわいい # 数字ではなく、プログラム全体が実行された後にコンソールにまとめて出力されます。

成長しました、

も醜くなりました

Python を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!
#クリックしてドラッグして移動します
それでは、何のためにあなたが必要なのでしょうか?

Python を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!
#クリックしてドラッグして移動します
問題は何ですか?
最初、Ajiang さんはマルチスレッドに問題があると考えていたため、さまざまな憶測を「裏付ける」ために愚かにもあらゆる情報を探していました。後から考えると、あまりにも愚かだったので、今でも笑いながら話しています。

Python を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!
クリックしてドラッグして移動
この事件から得た教訓は次のとおりです。 million 独善的ではなく、現実的な方法で問題を解決し、広い心であらゆる細部に取り組みます。
実は、リアルタイム出力が表示できない理由は、

print

の末尾の文字を変更したためです。

I/O 操作を最小限に抑えるために、Python には出力文字をキャッシュするメカニズムがあります。文字列の終わり、改行文字、またはバッファーの強制的な更新に遭遇すると、バッファーは領域の内容が対応するストリームに出力されます。

——私たちが変更したのは、デフォルトの改行文字

print

を削除したことで、当初は

print ごとにバッファーのリフレッシュがトリガーされていましたが、現在はバッファーのリフレッシュはトリガーできません。プログラムが終了するまで。 わかりました。問題が何であるかがわかったので、もう一度情報を検索しました。sys.stdout.flush

は標準出力バッファのフラッシュを強制的にトリガーできると聞いたので、

print の後に、sys.stdout.flush() がすぐに追加されました。 え?本当に良いのでしょうか?

Python を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!
クリックしてドラッグして移動します
これらはすべて知識ポイントです。書き留めてください。 、テストを受けなければなりません
Python を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!
クリックしてドラッグして移動します。

print の公式ドキュメントを確認してみましょう。そのプロトタイプは次のとおりです:

Python を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!
クリックしてドラッグして移動します

以下の説明によると、Python かどうかprint の出力は、fileflush という 2 つのパラメーターに応じてバッファリングされます。

file の種類によっては、sys.stdout のようにバッファリングが必要な場合もありますが、sys.stderr のようにバッファリングを必要としない種類もあります。

flush パラメータの場合、値が False (デフォルト) の場合、バッファリングするかどうかは file に依存します。また、その値がTrue、バッファは強制的にフラッシュされます。

呼び出し例の print 呼び出しを変更しましょう:

Python を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!
クリック アンド ドラッグ ドラッグ移動
Python を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!
クリックしてドラッグして移動
##進捗状況を達成することもできます 実際に印刷時間。

さらに、プログラムを呼び出すときに

-u

オプションを追加する別の方法もあります。これにより、バッファのリアルタイム更新も実現できます。

Python を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!
クリックしてドラッグして移動
Python を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!
クリックしてドラッグドラッグして移動 Move
もちろん、この方法はお勧めできません。結局のところ、プログラムのユーザー向けにプリセットを作成することはできません。

概要

この記事は、Ajiang の落とし穴の記録であり、ほとんどの人が遭遇しない Python の奇妙な問題を記録しています。

一般に、本物の Python プログラマーになりたい場合は、基本的な構文といくつかのコツをマスターするだけでは十分ではなく、Python 自体をある程度理解する必要があります。

結局のところ、剣士は自分の剣に精通していなければ、どうやって世界中を旅できるのでしょうか?

関連する無料学習の推奨事項:
Python ビデオ チュートリアル

以上がPython を使用するときに、人々はどれだけの落とし穴を経験してきたでしょうか?危険を回避してください!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。