516 Stimmen

Der Unterschied zwischen sys.stdout.write und print?

Gibt es Situationen, in denen sys.stdout.write() ist vorzuziehen gegenüber print ?

( Beispiele: bessere Leistung; sinnvollerer Code)

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() y print (bzw. warum Python beides hat), ist eine durchaus berechtigte Frage und braucht keine Beispiele. Der Auftraggeber hat nicht gesagt, dass die Befehlssyntax verwirrend ist.

9voto

Hamish Downer Punkte 15913

Meine Frage ist, ob es Situationen gibt, in denen sys.stdout.write() ist vorzuziehen gegenüber print

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.

6voto

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.

5voto

Shivid Punkte 1173

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)

5voto

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

3voto

GraceMeng Punkte 789
>>> 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:

  1. sys.stdout.write schreibt keine Nicht-String-Objekte, aber print se

  2. 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.com

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.

Powered by:

X