2011-01-17 3 views

Antwort

39
"{0} {1} {1}".format("foo", "bar") 
+1

Interessant. Warum funktioniert das mit '" str ".format (args)' aber nicht '" str "% args'? –

+2

@Rosarch: Weil die Syntax '{n}' nur für 'str.format()' funktioniert, nicht 'str .__ mod __()'. –

+1

@Rosarch: Ich nehme an, Sie haben den neuen Weg mit der alten Art der Formatierung gemischt, weil der alte Weg nicht '{}' als Platzhalter verwendet :), aber die '.format()' ist der neue Weg von formating strings werfen Sie einen Blick auf die pep 3101 für weitere Details: http://www.python.org/dev/peps/pep-3101/ – mouad

9
"%(foo)s %(foo)s %(bar)s" % { "foo" : "foo", "bar":"bar"} 

ist eine andere wahr, aber lange Antwort. Nur um Ihnen einen anderen Standpunkt über das Problem zu zeigen;)

+1

+1, weil ich nicht wusste, dass Sie das tun könnten, und ich bevorzuge die Lesbarkeit –

5

Python 3 hat genau diese Syntax, außer der % Operator ist jetzt die format Methode. str.format wurde auch zu Python 2.6+ hinzugefügt, um den Übergang zu Python 3 zu glätten. Weitere Informationen finden Sie unter format string syntax.

>>> '{0} {1} {1}' % ('foo', 'bar') 
'foo bar bar' 

In älteren Python-Versionen kann dies jedoch nicht mit einem Tupel gemacht werden. Sie können sich nähern, indem Sie die in Klammern eingeschlossenen Zuordnungsschlüssel verwenden. Bei Mapping-Schlüsseln müssen die Formatwerte als Diktat anstelle eines Tupels übergeben werden.

>>> '%(0)s %(1)s %(1)s' % {'0': 'foo', '1': 'bar'} 
'foo bar bar' 

Von Python manual:

Wenn das rechte Argument ist ein Wörterbuch (oder andere Mapping-Typ), dann sind die Formate in der Zeichenfolge muss eine parenthesised Abbildungsschlüssel in das Wörterbuch unmittelbar nach dem eingefügten umfassen '%' Zeichen. Der Zuordnungsschlüssel wählt den zu formatierenden Wert aus dem Mapping aus.