Da Python 3.0 und 3.1 EOL'ed sind und niemand sie verwendet, können und sollten Sie verwenden str.format_map(mapping) (Python 3.2+) verwenden:
Ähnlich wie str.format(**mapping), außer dass das Mapping direkt verwendet und nicht in a kopiert wirddict . Dies ist nützlich, wenn das Mapping beispielsweise eine dictUnterklasse ist.
Dies bedeutet, dass Sie zum Beispiel a verwenden können defaultdict , das einen Standardwert für fehlende Schlüssel festlegt (und zurückgibt):
>>> from collections import defaultdict
>>> vals = defaultdict(lambda: '<unset>', {'bar': 'baz'})
>>> 'foo is {foo} and bar is {bar}'.format_map(vals)
'foo is <unset> and bar is baz'
Auch wenn das bereitgestellte Mapping a ist dict eine Unterklasse und keine Unterklasse ist, wäre dies wahrscheinlich immer noch etwas schneller.
Der Unterschied ist jedoch nicht groß
>>> d = dict(foo='x', bar='y', baz='z')
dann
>>> 'foo is {foo}, bar is {bar} and baz is {baz}'.format_map(d)
ist etwa 10 ns (2%) schneller als
>>> 'foo is {foo}, bar is {bar} and baz is {baz}'.format(**d)
auf meinem Python 3.4.3. Der Unterschied wäre wahrscheinlich größer, wenn mehr Schlüssel im Wörterbuch enthalten sind, und
Beachten Sie, dass die Formatsprache jedoch viel flexibler ist. sie können indiziert Ausdrücke enthalten, Attributzugriffe und so weiter, so dass Sie können ein ganzes Objekt zu formatieren, oder 2 von ihnen:
>>> p1 = {'latitude':41.123,'longitude':71.091}
>>> p2 = {'latitude':56.456,'longitude':23.456}
>>> '{0[latitude]} {0[longitude]} - {1[latitude]} {1[longitude]}'.format(p1, p2)
'41.123 71.091 - 56.456 23.456'
Ab 3.6 können Sie auch die interpolierten Zeichenfolgen verwenden:
>>> f'lat:{p1["latitude"]} lng:{p1["longitude"]}'
'lat:41.123 lng:71.091'
Sie müssen nur daran denken, die anderen Anführungszeichen in den verschachtelten Anführungszeichen zu verwenden. Ein weiterer Vorteil dieses Ansatzes ist, dass er viel schneller ist als das Aufrufen einer Formatierungsmethode.