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.
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
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 –
'' ... '' - 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. –