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)
Gibt es Situationen, in denen sys.stdout.write() gegenüber print vorzuziehen ist?
Ich habe festgestellt, dass stdout in einer Multithreading-Situation besser funktioniert als print. Ich verwende eine Warteschlange ( FIFO ), um die zu druckenden Zeilen zu speichern, und ich halte alle Threads vor der Druckzeile, bis meine Druckwarteschlange leer ist. Trotzdem verliere ich bei der Verwendung von print manchmal die letzte \n auf der Debug-E/A (unter Verwendung der Wing Pro IDE ).
Wenn ich std.out mit \n in der Zeichenkette, werden die Debug-E/A korrekt formatiert und die \n werden genau angezeigt.
In Python 3 gibt es einen triftigen Grund für die Verwendung von print over sys.stdout.write
aber dieser Grund kann auch in einen Grund umgewandelt werden, die sys.stdout.write
stattdessen.
Der Grund dafür ist, dass print jetzt eine Funktion in Python 3 ist, die man überschreiben kann. Sie können also print überall in einem einfachen Skript verwenden und entscheiden, dass diese print-Anweisungen nach stderr
stattdessen. Sie können nun einfach die Druckfunktion umdefinieren, Sie könnten sogar die Druckfunktion global ändern, indem Sie sie mit dem builtins-Modul ändern. Natürlich mit file.write
können Sie angeben, um welche Datei es sich handelt, aber mit overwriting print können Sie auch das Zeilentrennzeichen oder das Argumententrennzeichen neu definieren.
Der umgekehrte Weg ist. Vielleicht sind Sie absolut sicher, dass Sie schreiben, um stdout
und Sie wissen, dass Sie den Druck auf etwas anderes umstellen werden, können Sie sich für die Verwendung von sys.stdout.write
, und verwenden Sie print für das Fehlerprotokoll oder etwas anderes.
Was Sie verwenden, hängt also davon ab, wie Sie es verwenden wollen. print
ist flexibler, aber das kann ein Grund dafür sein, es zu verwenden oder nicht zu verwenden. Ich würde mich trotzdem für die Flexibilität entscheiden und den Druck wählen. Ein weiterer Grund für die Verwendung print
ist stattdessen die Vertrautheit. Mehr Menschen wissen jetzt, was Sie mit Druck meinen, und weniger wissen sys.stdout.write
.
Wenn Sie in Python 2 eine Funktion weitergeben müssen, können Sie os.sys.stdout.write
auf eine Variable. Sie können dies nicht tun (in der REPL ) mit print
.
>import os
>>> cmd=os.sys.stdout.write
>>> cmd('hello')
hello>>>
Das funktioniert wie erwartet.
>>> cmd=print
File "<stdin>", line 1
cmd=print
^
SyntaxError: invalid syntax
Das funktioniert nicht. print
ist eine magische Funktion.
Sie haben gefragt,
Was ist der Unterschied zwischen
sys.stdout.write
y
Am besten kann ich das erklären, wenn ich Ihnen zeige, wie man schreibt print
in Bezug auf sys.stdout
Im Folgenden habe ich drei verschiedene Möglichkeiten zur Implementierung der Python print
Funktion:
import sys
def print(*args, sep=" ", file=sys.stdout, end="\n") -> None:
# implementation One
file.write(sep.join(str(arg) for arg in args))
file.write(end)
def print(*args, sep=" ", file=sys.stdout, end="\n") -> None:
# Implementation 2
file.write(str(args[0]))
for arg in args[1:]:
file.write(sep)
file.write(str(arg))
file.write(end)
return
def print(*args, sep=" ", file=sys.stdout, end="\n") -> None:
# implementation 3
it = iter(args)
arg = next(it)
file.write(str(arg))
try:
while True:
arg = next(it)
file.write(sep)
file.write(str(arg))
except StopIteration:
pass
file.write(end)
return None
Gibt es Situationen, in denen sys.stdout.write() besser ist als drucken?
Ich arbeite zum Beispiel an einer kleinen Funktion, die Sterne im Pyramidenformat ausgibt, wenn die Zahl als Argument übergeben wird, obwohl man das auch mit end="" in einer separaten Zeile zu drucken, habe ich sys.stdout.write in Abstimmung mit drucken damit dies funktioniert. Um dies näher zu erläutern stdout.write druckt in der gleichen Zeile wie drucken gibt seinen Inhalt immer in einer separaten Zeile aus.
import sys
def printstars(count):
if count >= 1:
i = 1
while (i <= count):
x=0
while(x<i):
sys.stdout.write('*')
x = x+1
print('')
i=i+1
printstars(5)
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.