Ich würde es gerne machen Python. Was ich in diesem Beispiel in tun möchtec::
In C:
#include <stdio.h>
int main() {
int i;
for (i=0; i<10; i++) printf(".");
return 0;
}
Ausgabe:
..........
In Python:
>>> for i in range(10): print('.')
.
.
.
.
.
.
.
.
.
.
>>> print('.', '.', '.', '.', '.', '.', '.', '.', '.', '.')
. . . . . . . . . .
In Python print
wird ein \n
oder Leerzeichen hinzugefügt , wie kann ich das vermeiden? Nun, es ist nur ein Beispiel. Sagen Sie mir nicht, dass ich zuerst einen String erstellen und dann drucken kann. Ich würde gerne wissen, wie man Strings an "anhängt" stdout
.
Antworten:
In Python 3 können Sie die Parameter
sep=
undend=
derprint
Funktion verwenden:So fügen Sie am Ende der Zeichenfolge keine neue Zeile hinzu:
So fügen Sie kein Leerzeichen zwischen allen Funktionsargumenten ein, die Sie drucken möchten:
Sie können eine beliebige Zeichenfolge an einen der Parameter übergeben und beide Parameter gleichzeitig verwenden.
Wenn Sie Probleme mit der Pufferung haben, können Sie die Ausgabe leeren, indem Sie ein
flush=True
Schlüsselwortargument hinzufügen :Python 2.6 und 2.7
Aus Python 2.6 können Sie die
print
Funktion entweder mit dem folgenden__future__
Modul aus Python 3 importieren :Hiermit können Sie die oben genannte Python 3-Lösung verwenden.
Beachten Sie jedoch, dass das
flush
Schlüsselwort in der Version der in Python 2print
importierten Funktion nicht verfügbar ist__future__
. Es funktioniert nur in Python 3, genauer gesagt in Version 3.3 und höher. In früheren Versionen müssen Sie bei einem Aufruf von noch manuell spülensys.stdout.flush()
. Sie müssen auch alle anderen Druckanweisungen in der Datei, in die Sie diesen Import durchführen, neu schreiben.Oder Sie können verwenden
sys.stdout.write()
Möglicherweise müssen Sie auch anrufen
um sicherzustellen,
stdout
wird sofort gespült.quelle
flush
das tun muss und was es eigentlich tut?Es sollte so einfach sein wie unter diesem Link von Guido Van Rossum beschrieben:
Betreff: Wie druckt man ohne AC / R?
http://legacy.python.org/search/hypermail/python-1992/0115.html
Ja, fügen Sie nach dem letzten zu druckenden Argument ein Komma hinzu. Diese Schleife druckt beispielsweise die Zahlen 0..9 in einer durch Leerzeichen getrennten Zeile. Beachten Sie den parameterlosen "Druck", der die letzte neue Zeile hinzufügt:
quelle
Hinweis: Der Titel dieser Frage lautete früher etwa "Wie drucke ich in Python?"
Da die Leute möglicherweise hierher kommen, um nach dem Titel zu suchen, unterstützt Python auch die Ersetzung im printf-Stil:
Und Sie können Zeichenfolgenwerte problemlos multiplizieren:
quelle
Verwenden Sie die Druckfunktion im Python3-Stil für Python2.6 + (werden auch alle vorhandenen Schlüsselanweisungen für Schlüsselwörter in derselben Datei beschädigt.)
Erstellen Sie eine separate
printf.py
Datei , um nicht alle Ihre Python2-Druckschlüsselwörter zu ruinierenVerwenden Sie es dann in Ihrer Datei
Weitere Beispiele für den Druckstil
quelle
So drucken Sie in derselben Zeile:
quelle
Die neue Funktion (ab Python 3.x)
print
verfügt über einen optionalenend
Parameter, mit dem Sie das Endzeichen ändern können:Ausgabe:
Es gibt auch
sep
für Trennzeichen:Ausgabe:
Wenn Sie dies in Python 2.x verwenden möchten, fügen Sie dies einfach am Anfang Ihrer Datei hinzu:
from __future__ import print_function
quelle
Verwenden Sie functools.partial, um eine neue Funktion namens printf zu erstellen
Einfache Möglichkeit, eine Funktion mit Standardparametern zu umschließen.
quelle
Sie können einfach
,
am Ende derprint
Funktion hinzufügen, damit keine neue Zeile gedruckt wird.quelle
In Python 3+
print
ist eine Funktion. Wenn du anrufstPython übersetzt es in
Sie können
end
nach Belieben wechseln .quelle
Python 2.6+ :
Python 3 :
Python <= 2,5 :
Wenn nach jedem Druck zusätzlicher Speicherplatz in Ordnung ist, in Python 2
irreführend in Python 2 - vermeiden Sie :
quelle
Du kannst es versuchen:
quelle
In Python3 können Sie dasselbe wie folgt tun:
und führen Sie es mit
python filename.py
oder auspython3 filename.py
quelle
Ich hatte vor kurzem das gleiche Problem ..
Ich habe es gelöst, indem ich:
Dies funktioniert sowohl unter Unix als auch unter Windows. Ich habe es nicht unter MacOSX getestet.
hth
quelle
sys.__stdout__
@lenooh hat meine Anfrage erfüllt. Ich habe diesen Artikel bei der Suche nach "Python Suppress Newline" entdeckt. Ich verwende IDLE3 auf Raspberry Pi, um Python 3.2 für PuTTY zu entwickeln. Ich wollte einen Fortschrittsbalken in der PuTTY-Befehlszeile erstellen. Ich wollte nicht, dass die Seite wegrollt. Ich wollte eine horizontale Linie, um dem Benutzer zu versichern, dass das Programm nicht zum Stillstand gekommen ist und nicht in einer lustigen Endlosschleife zum Mittagessen geschickt wurde - als Bitte, mich zu verlassen, geht es mir gut, aber das kann einige Zeit dauern. ' interaktive Nachricht - wie ein Fortschrittsbalken im Text.
Der
print('Skimming for', search_string, '\b! .001', end='')
initialisiert die Nachricht, indem er sich auf den nächsten Bildschirmschreibvorgang vorbereitet, bei dem drei Leerzeichen als ⌫⌫⌫ Rubout und dann ein Punkt gedruckt werden, wobei '001' gelöscht und die Periodenzeile erweitert wird. Nach dersearch_string
Benutzereingabe von Papageien\b!
schneidet das Ausrufezeichen meinessearch_string
Textes zu, um über das Leerzeichen zu gelangen, dasprint()
sonst erzwungen wird, und platziert die Interpunktion richtig. Darauf folgt ein Leerzeichen und der erste 'Punkt' des 'Fortschrittsbalkens', den ich simuliere. Unnötig ist, dass die Nachricht dann auch mit der Seitenzahl (formatiert auf eine Länge von drei mit führenden Nullen) versehen wird, um den Benutzer darauf aufmerksam zu machen, dass der Fortschritt verarbeitet wird und dass dies auch die Anzahl der Perioden widerspiegelt, die wir später für die erstellen werden Recht.Das Progress Bar Fleisch ist in der
sys.stdout.write('\b\b\b.'+format(page, '03'))
Linie. Zum Löschen nach links wird zunächst der Cursor über den drei numerischen Zeichen mit dem '\ b \ b \ b' als ⌫⌫⌫ Rubout gesichert und ein neuer Punkt gelöscht, um die Länge des Fortschrittsbalkens zu erhöhen. Dann schreibt es drei Ziffern der Seite, auf die es bisher fortgeschritten ist. Da daraufsys.stdout.write()
gewartet wird, dass ein voller Puffer oder der Ausgangskanal geschlossen wird,sys.stdout.flush()
wird das sofortige Schreiben erzwungen.sys.stdout.flush()
ist eingebaut, in dessen Ende mitprint()
umgangen wirdprint(txt, end='' )
. Dann durchläuft der Code seine alltäglichen zeitintensiven Operationen, während er nichts mehr druckt, bis er hierher zurückkehrt, um drei Ziffern zurückzuwischen, einen Punkt hinzuzufügen und erneut drei Ziffern zu schreiben, inkrementiert.Die drei Ziffern, die gelöscht und neu geschrieben wurden, sind keineswegs notwendig - es ist nur ein Schnörkel, der beispielhaft für
sys.stdout.write()
Versus stehtprint()
. Sie können genauso gut mit einem Punkt beginnen und die drei ausgefallenen Backslash-b-Backspaces vergessen (natürlich auch keine formatierten Seitenzahlen schreiben), indem Sie den Periodenbalken jedes Mal um eins länger durchdrucken - ohne Leerzeichen oder Zeilenumbrüche, indem Sie nur den Punkt verwendensys.stdout.write('.'); sys.stdout.flush()
Paar.Bitte beachten Sie, dass die Raspberry Pi IDLE3 Python-Shell die Rücktaste nicht als ⌫ Rubout berücksichtigt, sondern stattdessen ein Leerzeichen druckt und stattdessen eine scheinbare Liste von Brüchen erstellt.
- (o = 8> wiz
quelle
Sie werden feststellen, dass alle oben genannten Antworten korrekt sind. Aber ich wollte eine Abkürzung machen, um immer den Parameter "end = ''" am Ende zu schreiben.
Sie könnten eine Funktion wie definieren
Es würde die gesamte Anzahl von Parametern akzeptieren. Sogar es akzeptiert alle anderen Parameter wie Datei, Flush usw. und mit demselben Namen.
quelle
*arg
es am Anfang ist (Python 2.7), und es am Ende zu setzen lief, funktionierte aber nicht ganz richtig. Ich habe eine Funktion definiert, die nur verwendet wurdePrint(*args)
, und dann nur print with aufgerufensep='', end=''
. Und jetzt funktioniert es wie ich will. Also eine Gegenstimme für die Idee.Viele dieser Antworten scheinen etwas kompliziert zu sein. In Python 3.x machen Sie einfach Folgendes:
Der Standardwert für end ist
"\n"
. Wir ändern es einfach in ein Leerzeichen, oder Sie können auchend=""
(kein Leerzeichen) verwenden, um das zu tun, wasprintf
normalerweise geschieht.quelle
Sie möchten etwas für die rechte Schleife drucken, aber Sie möchten nicht, dass es jedes Mal in einer neuen Zeile gedruckt wird. Zum Beispiel:
aber du willst, dass es so gedruckt wird: hi hi hi hi hi hi richtig ???? Fügen Sie einfach ein Komma hinzu, nachdem Sie "hi" gedruckt haben.
Beispiel:
for i in range (0,5): print "hi", OUTPUT: hi hi hi hi hi
quelle
Oder haben Sie eine Funktion wie:
Dann jetzt:
Ausgänge:
quelle
Dies funktionierte sowohl in 2.7.8 als auch in 2.5.2 (Canopy- bzw. OSX-Terminal) - keine Modulimporte oder Zeitreisen erforderlich.
quelle
sys.stdout.isatty()
wenn Sie nicht in eine Datei umgeleitet werden.Es gibt zwei Möglichkeiten, dies zu tun:
Drucken ohne Zeilenumbruch in Python 3.x.
Fügen Sie nach der print-Anweisung nichts hinzu und entfernen Sie '\ n' mit
end=''
:Ein weiteres Beispiel in Loop :
Drucken ohne Zeilenumbruch in Python 2.x.
Das Hinzufügen eines nachgestellten Kommas besagt, dass nach dem Drucken ignoriert wird
\n
.Ein weiteres Beispiel in Loop :
Hoffe das wird dir helfen. Sie können diesen Link besuchen .
quelle
end=" "
zB: print ('hallo', end = '' "); print ('world')print 'hello' ;print'there'
in paiza.io/projects/e/35So9iUPfMdIORGzJTb2NQ... Sie müssen keine Bibliothek importieren. Verwenden Sie einfach das Löschzeichen:
Dadurch werden die neue Zeile und das Leerzeichen (^ _ ^) * entfernt.
quelle