2016-08-04 58 views
0

Mit str.format() kann ich Tupeln für accesing Argumente verwenden:Formatierte Stringliterale in Python 3.6 mit Tupeln

>>> '{0}, {1}, {2}'.format('a', 'b', 'c') 

'a, b, c'

oder

>>> t = ('a', 'b', 'c') 
>>> '{0}, {1}, {2}'.format(*t) 

'a, b, c'

Aber mit den neuen formatierten String-Literalen mit dem Präfix 'f' wie kann man Tupel verwenden?

+1

Was meinst du mit * Aber mit den neuen formatierten String-Literalen mit dem Präfix 'f' wie kann man Tupel * verwenden? Auch in Ihrem zweiten Beispiel müssen Sie das Tupel entpacken. – Kasramvd

+0

Die Verwendung von f-Strings hängt stark vom jeweiligen Anwendungsfall ab. Geben Sie uns ein realistisches Beispiel dafür, was Sie zu tun versuchen, da das aktuelle Problem am besten mit ', '.join (t)' in 3.6 und vor 3.6 –

+1

'' ... '' - Format ('a', 'b', 'c') 'ist ein ** Methodenaufruf **, den Sie mit 3 Argumenten aufgerufen haben. Sie haben in Ihrem ersten Beispiel kein Tupel übergeben. In Ihrem zweiten Beispiel verwenden Sie die Aufrufsyntax '* args'; 'str.format()' erhält immer noch 3 separate Argumente und weiß nicht, dass Sie ein Tupel verwendet haben, um diese zu liefern. –

Antwort

1

Ihr erster Aufruf str.format() ist ein regulärer Methodenaufruf mit 3 Argumenten, dort ist kein Tupel beteiligt. Ihr zweiter Anruf verwendet die Syntax * splat call; Der str.format() Aufruf erhält 3 separate einzelne Argumente, es ist egal, dass diese aus einem Tupel stammen.

Formatieren von Zeichenfolgen mit f verwenden Sie keinen Methodenaufruf, sodass Sie keine der beiden Methoden verwenden können. Jeder Slot in einer f'..' Formatierungszeichenfolge wird stattdessen als regulärer Python-Ausdruck ausgeführt.

Sie werden Ihre Werte aus dem Tupel extrahieren müssen direkt:

f'{t[0]}, {t[1]}, {t[2]}' 

oder zuerst die Tupel in neue lokale Variablen erweitern:

a, b, c = t 
f'{a}, {b}, {c}' 

oder einfach weiter str.format() verwenden. Sie haben keine , um eine f'..' Formatierungszeichenfolge zu verwenden, dies ist ein neues, zusätzliches Feature für die Sprache, kein Ersatz für str.format().

Von PEP 498 -- Literal String Interpolation:

Dieser PEP schlägt keine der vorhandenen Zeichenfolge Formatierungsmechanismen zu entfernen oder verbitten.

+1

'f'Values: {str (t) [1: -2]} ' 'ftw. Nein, aber ernsthaft, neue Wege könnten aus dem Nichts entstehen, basierend auf dem Anwendungsfall. Ich glaube nicht, dass diese Frage zu allgemein beantwortet werden kann. –

+0

'str.format()' wird in Python 3.6 nicht veraltet sein? – Trimax

+0

Nein, ich bin mir ziemlich sicher, dass es während Python 3 niemals verschwinden wird. @Trimax –