webentwicklung-frage-antwort-db.com.de

Python Zeichenkettenformatierung mit Prozentzeichen

Ich versuche genau das Folgende zu tun:

>>> x = (1,2)
>>> y = 'hello'
>>> '%d,%d,%s' % (x[0], x[1], y)
'1,2,hello'

Ich habe jedoch ein langes x, mehr als zwei Elemente, also habe ich versucht:

>>> '%d,%d,%s' % (*x, y)

aber es ist ein Syntaxfehler. Was wäre der richtige Weg, um dies zu tun, ohne wie im ersten Beispiel zu indizieren?

17
Sait

str % .. akzeptiert ein Tupel als rechten Operanden, so dass Sie Folgendes tun können:

>>> x = (1, 2)
>>> y = 'hello'
>>> '%d,%d,%s' % (x + (y,))  # Building a Tuple of `(1, 2, 'hello')`
'1,2,hello'

Ihr Versuch sollte funktionieren in Python 3. wobei Additional Unpacking Generalizations wird unterstützt, jedoch nicht in Python 2.x:

>>> '%d,%d,%s' % (*x, y)
'1,2,hello'
22
falsetru

Schauen Sie sich vielleicht str.format () an.

>>> x = (5,7)
>>> template = 'first: {}, second: {}'
>>> template.format(*x)
'first: 5, second: 7'

Aktualisieren:

Der Vollständigkeit halber beziehe ich auch zusätzliche Verallgemeinerungen zum Entpacken ein, beschrieben durch PEP 448 . Die erweiterte Syntax wurde in Python 3.5 eingeführt, und Folgendes ist kein Syntaxfehler mehr:

>>> x = (5, 7)
>>> y = 42
>>> template = 'first: {}, second: {}, last: {}'
>>> template.format(*x, y)  # valid in Python3.5+
'first: 5, second: 7, last: 42'

Wenn Sie jedoch in Python 3.4 und niedriger zusätzliche Argumente nach dem entpackten Tupel übergeben möchten, ist es wahrscheinlich am besten, sie als Argumente:

>>> x = (5, 7)
>>> y = 42
>>> template = 'first: {}, second: {}, last: {last}'
>>> template.format(*x, last=y)
'first: 5, second: 7, last: 42'

Dies vermeidet die Notwendigkeit, ein neues Tupel zu erstellen, das am Ende ein zusätzliches Element enthält.

10
plamut

Ich würde vorschlagen, dass Sie str.format anstelle von str % verwenden, da es "moderner" ist und auch eine bessere Reihe von Funktionen hat. Das heißt, was Sie wollen, ist:

>>> x = (1,2)
>>> y = 'hello'
>>> '{},{},{}'.format(*(x + (y,)))
1,2,hello

Für alle coolen Funktionen von format (und einige, die auch mit % zu tun haben) schauen Sie sich PyFormat an.

2
Fabio Menegazzo