Also, ich habe dieses Problem. Ich habe Tupel (1,2,3), das ich mit String-Formatierung drucken soll. z.B.
tup = (1,2,3)
print "this is a tuple %something" % (tup)
und dies sollte Tupeldarstellung mit Klammern wie drucken
Dies ist ein Tupel (1,2,3)
Aber ich bekomme TypeError: not all arguments converted during string formatting
stattdessen.
Wie in aller Welt kann ich das tun? Ein bisschen verloren hier, wenn ihr mich in die richtige Richtung weisen könntet :)
print(....)
.Beachten Sie, dass die
%
Syntax veraltet ist. Verwendungstr.format
, die einfacher und besser lesbar ist:quelle
%
es veraltet ist, aber ich bin jetzt immer immer dustr.format
, blind. Trotzdem interessiert mich, was das vollständige Qualifikationsmerkmal ist, denn das Einfache{0}
ist nicht das vollständige Qualifikationsmerkmal, sondern lediglich ein Positionsindikator. Zum Beispielint
würde ich das vollständige Qualifikationsmerkmal nennen{0:d}
(oder{3:d}
zum Beispiel, wenn das zu druckende Int an der 4. Position in derstr.format
Methode auftritt ). Ich habe versucht, ein Tupel mit dem{0:s}
Qualifikationsmerkmal zu drucken, aber es funktioniert nicht. Also, was ist die vollständige Qualifikation für so etwas wie ein Tupel?str
können Sie sagen{!s}
, dies ist jedoch die Standardeinstellung, sodass dies nicht erforderlich ist. Wenn Sierepr
stattdessen verwenden möchten , können Sie dies tun{!r}
. Im Gegensatz zu mit%
müssen keined
Ganzzahlen angegeben werden.%
nicht vollständig veraltet ist. In der Tatpylint
wird sich sogar beschweren, wenn Sie die.format
Syntax innerhalb deslogging
Moduls verwenden: stackoverflow.com/a/34634301/534238Viele der oben gegebenen Antworten waren richtig. Der richtige Weg ist:
Es gab jedoch einen Streit darüber, ob der
'%'
String-Operator veraltet ist. Wie viele darauf hingewiesen haben, ist es definitiv nicht veraltet, da der'%'
String-Operator einfacher ist, eine String-Anweisung mit Listendaten zu kombinieren.Beispiel:
Wenn Sie die
.format()
Funktion verwenden, erhalten Sie jedoch eine ausführliche Anweisung.Beispiel:
Weiter mehr,
'%'
String - Operator auch nützlich für uns den Datentyp wie zu validieren%s
,%d
,%i
, während .format () nur zwei Umwandlungs Flaggen unterstützen :'!s'
und'!r'
.quelle
.format
:tup = (1,2,3); print('First: {}, Second: {}, Third: {}'.format(*tup))
.Beachten Sie, dass dies
(tup,)
ein Tupel ist, das ein Tupel enthält. Das äußere Tupel ist das Argument für den Operator%. Das innere Tupel ist sein Inhalt, der tatsächlich gedruckt wird.(tup)
ist ein Ausdruck in Klammern, der bei Auswertung zu ergibttup
.(tup,)
mit dem nachfolgenden Komma steht ein Tupel, dastup
als einziges Mitglied enthält.quelle
Dies verwendet keine Zeichenfolgenformatierung, aber Sie sollten in der Lage sein:
Wenn Sie die Zeichenfolgenformatierung wirklich verwenden möchten:
Dies setzt voraus, dass Sie eine Python-Version vor 3.0 verwenden.
quelle
quelle
Obwohl diese Frage ziemlich alt ist und viele verschiedene Antworten hat, möchte ich dennoch die imho "pythonischste" und auch lesbarste / prägnanteste Antwort hinzufügen.
Da die allgemeine
tuple
Druckmethode von Antimony bereits korrekt angezeigt wird, ist dies eine Ergänzung zum Drucken jedes Elements in einem Tupel separat, wie Fong Kah Chun mit der%s
Syntax korrekt angezeigt hat .Interessanterweise wurde es nur in einem Kommentar erwähnt, aber die Verwendung eines Sternchenoperators zum Entpacken des Tupels bietet volle Flexibilität und Lesbarkeit unter Verwendung der
str.format
Methode, wenn Tupelelemente separat gedruckt werden .Dies vermeidet auch das Drucken eines nachgestellten Kommas beim Drucken eines Einzelelement-Tupels, wie von Jacob CUI mit umgangen
replace
. (Auch wenn imho die nachgestellte Kommadarstellung korrekt ist, wenn die Typendarstellung beim Drucken beibehalten werden soll ):quelle
Ich denke, der beste Weg, dies zu tun, ist:
Wenn Sie mit der Formatierung im Printf- Stil vertraut sind , unterstützt Python eine eigene Version. In Python erfolgt dies mit dem Operator "%", der auf Zeichenfolgen angewendet wird (eine Überladung des Modulo-Operators), der eine beliebige Zeichenfolge verwendet und eine Formatierung im printf-Stil darauf anwendet.
In unserem Fall weisen wir es an, "Dies ist ein Tupel:" zu drucken und dann eine Zeichenfolge "% s" hinzuzufügen. Für die eigentliche Zeichenfolge übergeben wir eine Zeichenfolgendarstellung des Tupels (indem wir str ( t)).
Wenn Sie mit der Formatierung im Printf-Stil nicht vertraut sind, empfehle ich dringend, etwas zu lernen, da dies sehr normal ist. Die meisten Sprachen unterstützen es auf die eine oder andere Weise.
quelle
Bitte beachten Sie, dass ein nachfolgendes Komma hinzugefügt wird, wenn das Tupel nur einen Eintrag enthält. z.B:
und du wirst bekommen:
In einigen Fällen möchten Sie beispielsweise eine Liste in Anführungszeichen erhalten, die in MySQL-Abfragezeichenfolgen wie verwendet werden soll
Sie müssen in Betracht ziehen, das Tailing-Komma zu entfernen. Verwenden Sie replace (',)', ')') nach der Formatierung, da das Tupel möglicherweise nur 1 Element wie ('Tom',) enthält. Daher muss das Tailing-Komma entfernt werden:
Bitte schlagen Sie vor, ob Sie eine angemessene Möglichkeit haben, dieses Komma in der Ausgabe zu entfernen.
quelle
format()
in Datenbankabfragen verwenden. Hierfür gibt es in jeder Bibliothek anwendbare Methoden.format()
mit von Benutzern gesammelten Werten kann zu einer SQL-Injection führen. Es ist sicherer, Eingabewerte zu überprüfen, bevor sie in die Abfrage eingefügt werden. Weitere Informationen finden Sie in diesen Richtlinien: dev.mysql.com/doc/connector-python/en/… Sie können Parameterwerte auch in eine Zeichenfolgendarstellung vom Datenbanktyp umwandeln und dann in die Abfragezeichenfolge einfügen. Werfen Sie einen Blick auf initd.org/psycopg/docs/usage.html , wo man ein Gegenbeispiel mit hat%
Betreiber und eine Lösung mitexecute()
Verfahren , bei dem Abfrageparameter in der Methode args übergeben werden.Neben den in den anderen Antworten vorgeschlagenen Methoden können Sie seit Python 3.6 auch die Literal String Interpolation (f-Strings) verwenden:
quelle
Versuchen Sie dies, um eine Antwort zu erhalten:
Wenn wir nur ein Tupel in () einfügen, wird selbst ein Tupel erstellt:
Dies bedeutet, dass die obige print-Anweisung wie folgt aussieht: print ("Wert:% s"% ('1', '2')), was ein Fehler ist!
Daher:
Oben werden die Argumente des Drucks korrekt eingegeben.
quelle
Für Python 3
quelle
Sie können dies auch versuchen;
Sie können nicht
%something
mit(tup)
nur wegen des Packens und Auspackens Konzept mit Tupel verwenden.quelle
Sprechen ist billig, zeigen Sie den Code:
quelle