Wie viele Fallstricke sind bei der Verwendung von Python aufgetreten? Gefahren vermeiden!
coldplay.xixinach vorne
2020-09-29 18:01:222146Durchsuche
Es besteht kein Zweifel, dass die Funktion print die am häufigsten verwendete Funktion in unserem täglichen Leben ist, egal ob es sich um die Formatierung der Ausgabe oder das Drucken von Zwischenvariablen zum Debuggen handelt, es gibt fast nichts, was ist print kann nicht funktionieren. print 函数是我们日常最常用的函数,无论是格式化输出还是打印中间变量进行调试,几乎没有 print 接不了的活儿。
Aber letztes Mal ließ sich Ajiang fast von print täuschen.
Woher kommt die Grube
Anfangs wollte ich einem meiner Befehlszeilen-Gadgets eine Fortschrittsanzeigefunktion hinzufügen, also habe ich threading Modul zur Implementierung von Multithreading. Ein Thread wird zum Ausführen der eigentlichen Logik und der andere Thread zum Drucken des aktuellen Fortschritts verwendet. <figure><img class="lazyload" src="https://img.php.cn/upload/article/000/000/052/e81d361fe9c2aab616d404b5cdf741d3-12.png" data- style="max-width:90%" data- style="max-width:90%" alt="Wie viele Fallstricke sind bei der Verwendung von Python aufgetreten? Gefahren vermeiden!" ><img class="lazyload" src="https://img.php.cn/upload/article/000/000/052/00378eb73c929c1c9646673ec2efcc73-0.png" data- style="max-width:90%" data-height=" 600" alt="Wie viele Fallstricke sind bei der Verwendung von Python aufgetreten? Gefahren vermeiden!" ><figcaption></figcaption></figure><figure><figcaption>Klicken und ziehen, um zu verschieben</figcaption></figure><p>Nach unserer </p>🎜 jahrelangen Erfahrung in der Verwendung der Befehlszeile wird der Druckfortschritt im Allgemeinen inline gedruckt, und Pythons <code>print🎜 🎜 druckt am Ende standardmäßig ein Zeilenumbruchzeichen, was sehr unansehnlich ist. 🎜🎜Aber glücklicherweise bietet print auch eine Schnittstelle zum Ändern des letzten Zeichens des Drucks. Durch Angabe des end-Parameters von print können Sie Änderungen vornehmen print. 🎜🎜Also habe ich angefangen und den print("#")-Aufruf zum Drucken des Fortschritts in print("#", end="") code> geändert. 🎜🎜Ähnlich wie hier: 🎜🎜🎜🎜🎜🎜🎜Klicken und ziehen, um zu verschieben🎜🎜🎜Ich glaube nicht, aber diese Änderung hat ein großes Problem: Der Fortschritt kann nicht in Echtzeit gedruckt werden. 🎜🎜🎜🎜🎜🎜🎜Klicken und ziehen, um zu verschieben🎜🎜🎜Mit anderen Worten, die #-Nummern, die während der Ausführung des Programms einzeln gedruckt werden sollten, sind nicht mehr gehorsam und nettes #, wird aber sofort nach der Ausführung des gesamten Programms an die Konsole ausgegeben. 🎜🎜Es ist erwachsen geworden und hässlich geworden. 🎜🎜🎜🎜🎜🎜🎜Zum Bewegen klicken und ziehen🎜🎜🎜Wozu brauche ich dich dann? 🎜🎜🎜🎜🎜🎜🎜Klicken und ziehen, um zu verschieben🎜🎜
Was ist das Problem?
🎜Zuerst dachte Ajiang, es gäbe ein Problem mit Multi-Threading, also suchte sie törichterweise überall nach Informationen, um ihre verschiedenen Vermutungen zu „stützen“ – als sie später darüber nachdachte, war es so dumm, dass sie immer noch lacht, wenn sie darüber spricht es jetzt🎜 🎜🎜🎜🎜🎜🎜Zum Bewegen klicken und ziehen🎜🎜🎜Die Lektion, die uns dieser Vorfall lehrt, ist: Seien Sie niemals selbstgerecht, sondern lösen Sie Probleme auf bodenständige Weise und gehen Sie mit jedem Detail mit Demut um . 🎜🎜Eigentlich können wir die Echtzeitausgabe nicht sehen, weil wir das Endzeichen von print geändert haben. 🎜🎜Um E/A-Vorgänge zu minimieren, verfügt Python über einen Mechanismus, der die Ausgabezeichen so weit wie möglich zwischenspeichert, wenn das Ende der Zeichenfolge, ein Zeilenumbruchzeichen oder der Puffer erzwungen wird, den Inhalt des Puffers zu aktualisieren wird sofort in den entsprechenden Stream ausgegeben. 🎜🎜——Was wir geändert haben, ist, das Standard-Neuzeilenzeichen von print zu entfernen, sodass ursprünglich jeder print eine Pufferaktualisierung auslösen würde, die nun zu „Jetzt kann die Pufferaktualisierung nicht ausgelöst werden“ wurde bis das Programm endet. 🎜🎜Okay, da wir nun wissen, wo das Problem liegt, haben wir erneut nach Informationen gesucht. Wir haben gehört, dass sys.stdout.flush das Leeren des Standardausgabepuffers erzwingen kann, also in print Danach wurde sofort sys.stdout.flush() hinzugefügt. 🎜🎜Äh? Ist es wirklich gut? 🎜🎜🎜🎜🎜🎜🎜🎜Zum Bewegen klicken und ziehen🎜🎜🎜Das sind alles Wissenspunkte, notieren Sie sie und machen Sie den Test🎜Zum Verschieben klicken und ziehen
Schauen wir uns die offizielle Dokumentation für print an, deren Prototyp ist: print 的官方文档,其原型为:
Zum Verschieben klicken und ziehen Laut der Beschreibung unten hängt es von zwei Parametern ab, ob die Ausgabe von print in Python gepuffert wird: file und flush. Einige Arten von Dateien erfordern eine Pufferung, wie z. B. sys.stdout, während andere keine Pufferung erfordern, wie z. B. sys.stderr. Wenn der Wert des Parameters flushFalse (Standard) ist, hängt die Frage, ob gepuffert werden soll, von der Datei file ab > True, das Leeren des Puffers wird erzwungen. Ändern wir den print-Aufruf im Beispielaufruf:
Zum Verschieben klicken und ziehen
Klicken und ziehen Sie auf Mobile
kann auch das Drucken des Fortschritts in Echtzeit realisieren.
Darüber hinaus gibt es eine Möglichkeit, beim Aufrufen des Programms eine Option -u hinzuzufügen, mit der auch eine Echtzeitaktualisierung des Puffers erreicht werden kann: 🎜🎜🎜🎜🎜🎜🎜🎜Klicken und ziehen zum Verschieben🎜 🎜🎜🎜🎜🎜🎜🎜🎜Klicken und ziehen zum Verschieben🎜🎜🎜Diese Methode ist natürlich nicht zu empfehlen, schließlich können keine Voreinstellungen für den Benutzer des Programms vorgenommen werden. 🎜🎜Zusammenfassung🎜🎜Dieser Artikel ist eine Aufzeichnung der Fallstricke von Ajiang. Er beschreibt ein seltsames Problem in Python, auf das nur wenige Menschen stoßen werden. 🎜🎜Wenn Sie ein echter Python-Programmierer werden möchten, reicht es im Allgemeinen nicht aus, nur die grundlegende Syntax und einige Tricks zu beherrschen. Sie müssen immer noch ein gewisses Verständnis von Python selbst haben. 🎜🎜Wie kann ein Schwertkämpfer schließlich durch die Welt navigieren, wenn er nicht mit seinem eigenen Schwert vertraut ist? 🎜🎜🎜Verwandte kostenlose Lernempfehlungen: 🎜Python-Video-Tutorial🎜🎜🎜
Das obige ist der detaillierte Inhalt vonWie viele Fallstricke sind bei der Verwendung von Python aufgetreten? Gefahren vermeiden!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!