Das kannst du nicht. Backslashes können nicht in den geschweiften Klammern erscheinen {}
. dies führt zu einem SyntaxError
:
>>> f'{\}'
SyntaxError: f-string expression part cannot include a backslash
Dies ist im PEP für F-Strings angegeben:
Backslashes erscheinen möglicherweise nicht in den Ausdrucksteilen von F-Strings. [...]
Eine Möglichkeit besteht darin '\n'
, einen Namen und dann .join
diesen innerhalb der f
Zeichenfolge zuzuweisen. das heißt, ohne ein Literal zu verwenden:
names = ['Adam', 'Bob', 'Cyril']
nl = '\n'
text = f"Winners are:{nl}{nl.join(names)}"
print(text)
Ergebnisse in:
Winners are:
Adam
Bob
Cyril
Eine andere Option, wie von @wim angegeben, besteht chr(10)
darin, \n
zurückgegeben zu werden und dort beizutreten.f"Winners are:\n{chr(10).join(names)}"
Ein weiterer Grund ist natürlich, '\n'.join
vorher den Namen entsprechend hinzuzufügen:
n = "\n".join(names)
text = f"Winners are:\n{n}"
was zu der gleichen Ausgabe führt.
Hinweis:
Dies ist einer der kleinen Unterschiede zwischen f
-strings und str.format
. In letzterem Fall können Sie immer Interpunktion verwenden, vorausgesetzt, dass ein entsprechendes verrücktes Diktat entpackt wird, das die folgenden Schlüssel enthält:
>>> "{\\} {*}".format(**{"\\": 'Hello', "*": 'World!'})
"Hello World!"
(Bitte tu das nicht.)
Im ersten Fall ist die Interpunktion nicht zulässig, da Sie keine Bezeichner haben können, die sie verwenden.
Nebenbei: Ich würde mich definitiv für print
oder entscheiden format
, wie die anderen Antworten als Alternative vorschlagen. Die von mir angegebenen Optionen gelten nur, wenn Sie müssen aus irgendeinem Grund Verwendung f-Strings.
Nur weil etwas neu ist, heißt das nicht, dass du versuchen solltest, alles damit zu machen ;-)
f"Winners are:\n{chr(10).join(names)}"