Antworten:
In Python2 print
war ein Schlüsselwort, das eine Anweisung einführte:
print "Hi"
In Python3 print
ist 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}')
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.
Die am meisten empfohlene Methode ist die Verwendung der format
Methode. Lesen Sie hier mehr darüber
a, b = 1, 2
print("a={0},b={1}".format(a, b))
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
PRINT
und FORMAT
...? Zurück in der Zeit 60+ Jahre bis zu den Tagen von FORTRAN :)
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 .
Einfaches Beispiel:
print("foo %d, bar %d" % (1,2))
Eine einfachere.
def printf(format, *values):
print(format % values )
Dann:
printf("Hello, this is my name %s and my age %d", "Martin", 20)
Da Sie %
sich außerhalb der print(...)
Klammern befinden, versuchen Sie, Ihre Variablen in das Ergebnis Ihres print
Aufrufs 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).
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.
%
war schon immer ein String-Operator, der nicht mit derprint
Anweisung zusammenhängt. Sie können beispielsweise eine Zeichenfolge mit erstellen und diese Zeichenfolges="a=%d,b=%d"%(f(x,n),g(x,n))
dann mit druckenprint s
.