Stefan Schwarzer, 04.09.2013 23:15:
Davon abgesehen, kann `format` noch ein bisschen mehr, als nur besser mit Tupeln umgehen. Zum Beispiel ist so etwas möglich:
"{0}, {1} - und noch mal {0}".format(1, 2) '1, 2 - und noch mal 1'
d = {"a": 1, "b": 2} "{0[a]} und {0[b]}".format(d) '1 und 2'
Das kannst du mit %-Formatierung auch schon: >>> '%(a)s + %(b)s = %(a)s' % dict(a=1, b=0) '1 + 0 = 1'
class X(object): pass ... x = X() x.a = 3 x.b = 4 "{0.a} und {0.b}".format(x) '3 und 4'
Das geht mit %-Formatierung wirklich nicht. Ist manchmal ganz nett. Allerdings kannst du sowas machen wie >>> '%(a)s + %(b)s = %(a)s' % vars(x) '3 + 4 = 3' Ansonsten gibt es auch noch string.Template(): >>> import string >>> t = string.Template('$a + $b = $a') >>> t.substitute(a=1, b=0) '1 + 0 = 1' Das string.Template() ist besonders schnell wenn ich es öfter brauche, da der Formatierungstext nicht jedes Mal neu geparst werden muss. Kann aber keine Zahlenformatierung etc. Bei übersetzten Projekten brauche ich da aber eh Babel (oder irgend ein anderes I18n-Tool), da hilft mir sowas wie "%.2f" oder .format() nicht weiter. Ich benutze inzwischen alle drei mal hier und mal da. Die .format() Syntax ist vor allem bei übersetztem Text praktisch, da "Nutzbar für {timeframe}" für die Übersetzer lesbarer und weniger fehleranfällig ist als "Nutzbar für %(timeframe)s" Stefan