Nie możesz. Wewnątrz nawiasów klamrowych nie mogą pojawić się ukośne ukośne {}
; spowoduje to SyntaxError
:
>>> f'{\}'
SyntaxError: f-string expression part cannot include a backslash
Jest to określone w PEP dla f-stringów:
Ukośniki odwrotne mogą nie pojawiać się wewnątrz fragmentów wyrażenia f-stringów, [...]
Jedną z opcji jest przypisanie '\n'
nazwy, a następnie .join
umieszczenie jej wewnątrz f
-string; to znaczy bez użycia literału:
names = ['Adam', 'Bob', 'Cyril']
nl = '\n'
text = f"Winners are:{nl}{nl.join(names)}"
print(text)
Prowadzi do:
Winners are:
Adam
Bob
Cyril
Inną opcją, określone przez @wim, jest użycie chr(10)
aby \n
powrócił, a potem przystąpić tam.f"Winners are:\n{chr(10).join(names)}"
Jeszcze innym jest oczywiście '\n'.join
wcześniejsze dodanie nazwy:
n = "\n".join(names)
text = f"Winners are:\n{n}"
co daje taki sam wynik.
Uwaga:
To jedna z małych różnic między f
-strings i str.format
. W tym drugim przypadku zawsze możesz użyć interpunkcji, pod warunkiem, że zostanie rozpakowany odpowiedni zwariowany dykt, który zawiera te klucze:
>>> "{\\} {*}".format(**{"\\": 'Hello', "*": 'World!'})
"Hello World!"
(Proszę, nie rób tego.)
W pierwszym przypadku interpunkcja nie jest dozwolona, ponieważ nie możesz mieć identyfikatorów, które ich używają.
Poza tym: zdecydowanie wybrałbym print
lub format
, jak sugerują inne odpowiedzi, jako alternatywę. Opcje, które podałem, mają zastosowanie tylko wtedy, gdy z jakiegoś powodu musisz użyć f-stringów.
To, że coś jest nowe, nie oznacza, że powinieneś próbować i robić z tym wszystko ;-)
f"Winners are:\n{chr(10).join(names)}"