Gibt es Situationen, in denen sys.stdout.write()
ist vorzuziehen gegenüber print
?
( Beispiele: bessere Leistung; sinnvollerer Code)
Gibt es Situationen, in denen sys.stdout.write()
ist vorzuziehen gegenüber print
?
( Beispiele: bessere Leistung; sinnvollerer Code)
Meine Frage ist, ob es Situationen gibt, in denen
sys.stdout.write()
ist vorzuziehen gegenüber
Wenn Sie eine Kommandozeilenanwendung schreiben, die sowohl in Dateien als auch in stdout schreiben kann, ist dies sehr praktisch. Sie können Dinge tun wie:
def myfunc(outfile=None):
if outfile is None:
out = sys.stdout
else:
out = open(outfile, 'w')
try:
# do some stuff
out.write(mytext + '\n')
# ...
finally:
if outfile is not None:
out.close()
Das bedeutet jedoch, dass Sie die with open(outfile, 'w') as out:
Muster, aber manchmal lohnt es sich.
In Python 2.x wird die print
Anweisung verarbeitet das, was Sie ihr geben, vor, wandelt es dabei in Zeichenketten um, behandelt Trennzeichen und Zeilenumbrüche und ermöglicht die Umleitung in eine Datei. In Python 3.x wird sie zu einer Funktion, hat aber immer noch die gleichen Aufgaben.
sys.stdout
ist eine Datei oder eine dateiähnliche Klasse, die über Methoden zum Schreiben in die Datei verfügt, die Zeichenketten oder etwas in dieser Art annehmen.
Sie ist vorzuziehen, wenn dynamisches Drucken sinnvoll ist, z. B. um Informationen in einem langen Prozess zu geben:
import time, sys
Iterations = 555
for k in range(Iterations+1):
# Some code to execute here ...
percentage = k / Iterations
time_msg = "\rRunning Progress at {0:.2%} ".format(percentage)
sys.stdout.write(time_msg)
sys.stdout.flush()
time.sleep(0.01)
Ein Unterschied zwischen print
y sys.stdout.write
um in Python 3 darauf hinzuweisen, ist auch der Wert, der bei der Ausführung im Terminal zurückgegeben wird. In Python 3, sys.stdout.write
gibt die Länge der Zeichenkette zurück, während print
gibt nur None
.
Wenn Sie also beispielsweise den folgenden Code interaktiv im Terminal ausführen, wird die Zeichenkette gefolgt von ihrer Länge ausgedruckt, da die Länge zurückgegeben und ausgegeben wird, wenn sie interaktiv ausgeführt wird:
>>> sys.stdout.write(" hi ")
hi 4
>>> sys.stdout.write(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected a string or other character buffer object
>>> sys.stdout.write("a")
a>>> sys.stdout.write("a") ; print(1)
a1
Betrachten Sie das obige Beispiel:
sys.stdout.write
schreibt keine Nicht-String-Objekte, aber print
se
sys.stdout.write
fügt am Ende kein neues Zeilensymbol ein, sondern print
se
Wenn wir tief eintauchen,
sys.stdout
ist ein Dateiobjekt, das für die Ausgabe von print() verwendet werden kann
wenn das Dateiargument von print()
nicht angegeben ist, sys.stdout
verwendet werden
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
6 Stimmen
Welche Version von Python? 2.x oder 3.x?
0 Stimmen
Ehrlich gesagt würde ich gerne beides wissen, obwohl ich keine Erfahrung mit Python 3 habe. Habe die Frage aktualisiert.
29 Stimmen
@S.Lott : Frage nach den grundlegenden Unterschieden zwischen
sys.stdout.write()
yprint
(bzw. warum Python beides hat), ist eine durchaus berechtigte Frage und braucht keine Beispiele. Der Auftraggeber hat nicht gesagt, dass die Befehlssyntax verwirrend ist.