Wie drucke ich wie printf in Python3?


125

In Python 2 habe ich verwendet:

print "a=%d,b=%d" % (f(x,n),g(x,n))

Ich habe es versucht:

print("a=%d,b=%d") % (f(x,n),g(x,n))

11
%war schon immer ein String-Operator, der nicht mit der printAnweisung zusammenhängt. Sie können beispielsweise eine Zeichenfolge mit erstellen und diese Zeichenfolge s="a=%d,b=%d"%(f(x,n),g(x,n))dann mit drucken print s.
Chepper

Antworten:


206

In Python2 printwar ein Schlüsselwort, das eine Anweisung einführte:

print "Hi"

In Python3 printist eine Funktion, die aufgerufen werden kann:

print ("Hi")

In beiden Versionen %ist dies ein Operator, der eine Zeichenfolge auf der linken Seite und einen Wert oder ein Tupel von Werten oder ein Zuordnungsobjekt (wie dict) auf der rechten Seite benötigt.

Ihre Linie sollte also so aussehen:

print("a=%d,b=%d" % (f(x,n),g(x,n)))

Die Empfehlung für Python3 und höher lautet außerdem, die {}Formatierung im Stil anstelle der %Formatierung im Stil zu verwenden:

print('a={:d}, b={:d}'.format(f(x,n),g(x,n)))

Python 3.6 führt ein weiteres Paradigma für die Formatierung von Zeichenfolgen ein: f-Zeichenfolgen .

print(f'a={f(x,n):d}, b={g(x,n):d}')

14
oder: In print('a={first:4.2f}, b={second:03d}'.format(first=f(x,n),second=g(x,n))) diesem Beispiel wird gezeigt, wie Sie die Modifikatoren im printf-Stil verwenden und dennoch Schlüsselwörter verwenden können.
Fbicknel

2
@rapt, es hat einige große Vorteile. Nicht zuletzt können Sie dasselbe Format nur mehrmals oder in falscher Reihenfolge referenzieren: "{1}, {1}, {0} und {1}" .format ("Eier", "Spam") = = "Spam, Spam, Eier und Spam"
Dr. Xorile

53

Die am meisten empfohlene Methode ist die Verwendung der formatMethode. Lesen Sie hier mehr darüber

a, b = 1, 2

print("a={0},b={1}".format(a, b))

28

Einfache printf () -Funktion aus O'Reillys Python-Kochbuch .

import sys
def printf(format, *args):
    sys.stdout.write(format % args)

Beispielausgabe:

i = 7
pi = 3.14159265359
printf("hi there, i=%d, pi=%.2f\n", i, pi)
# hi there, i=7, pi=3.14

Heh ... PRINTund FORMAT...? Zurück in der Zeit 60+ Jahre bis zu den Tagen von FORTRAN :)
Skeeve

1
Der Link zum Kochbuch von O'Reilly ist tot.
Ideogramm

22

In Python 3.6 wurden F-Strings für die Inline-Interpolation eingeführt. Noch schöner ist, dass die Syntax erweitert wurde, um auch Formatspezifizierer mit Interpolation zuzulassen. Etwas, an dem ich gearbeitet habe, während ich das gegoogelt habe (und auf diese alte Frage gestoßen bin!):

print(f'{account:40s} ({ratio:3.2f}) -> AUD {splitAmount}')

PEP 498 enthält die Details. Und ... es hat meinen Ärger mit Formatspezifizierern in anderen langs sortiert - ermöglicht Spezifizierer, die selbst Ausdrücke sein können! Yay! Siehe: Formatbezeichner .


2
Hinweis: Dies ist auch die performanteste Methode, um Variablen in Zeichenfolgen einzufügen.
Rotareti


11

Eine einfachere.

def printf(format, *values):
    print(format % values )

Dann:

printf("Hello, this is my name %s and my age %d", "Martin", 20)

2

Da Sie %sich außerhalb der print(...)Klammern befinden, versuchen Sie, Ihre Variablen in das Ergebnis Ihres printAufrufs einzufügen . print(...)kehrt zurück None, so dass dies nicht funktioniert, und es gibt auch die kleine Sache, dass Sie Ihre Vorlage bereits gedruckt haben, und Zeitreisen sind nach den Gesetzen des Universums, in dem wir leben, verboten.

Das Ganze, das Sie drucken möchten, einschließlich des %Operanden und seines Operanden, muss sich in Ihrem print(...)Aufruf befinden, damit die Zeichenfolge vor dem Drucken erstellt werden kann.

print( "a=%d,b=%d" % (f(x,n), g(x,n)) )

Ich habe ein paar zusätzliche Leerzeichen hinzugefügt, um es klarer zu machen (obwohl sie nicht notwendig sind und im Allgemeinen nicht als guter Stil angesehen werden).


2

Mit anderen Worten: printf fehlt in Python ... Ich bin überrascht! Bester Code ist

def printf(format, *args):
    sys.stdout.write(format % args)

Aufgrund dieses Formulars darf \ n nicht gedruckt werden. Alle anderen nein. Deshalb ist der Druck ein schlechter Operator. Außerdem müssen Sie Argumente in spezieller Form schreiben. Es gibt keine Nachteile in der obigen Funktion. Es ist eine übliche Standardform der printf-Funktion.


1
Sie können \ n im Druck trivial vermeiden. Fügen Sie einfach "," nach dem zu druckenden Wert hinzu.
Hejazzman

1
print("Name={}, balance={}".format(var-name, var-balance))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.