No puedes. Las barras invertidas no pueden aparecer dentro de las llaves {}
; hacerlo da como resultado SyntaxError
:
>>> f'{\}'
SyntaxError: f-string expression part cannot include a backslash
Esto se especifica en el PEP para f-strings:
Es posible que no aparezcan barras invertidas dentro de las porciones de expresión de las cadenas de f, [...]
Una opción es asignar '\n'
un nombre y luego .join
en el interior de f
-string; es decir, sin usar un literal:
names = ['Adam', 'Bob', 'Cyril']
nl = '\n'
text = f"Winners are:{nl}{nl.join(names)}"
print(text)
Resultados en:
Winners are:
Adam
Bob
Cyril
Otra opción, según lo especificado por @wim, es usar chr(10)
para ser \n
devuelto y luego unirse allí.f"Winners are:\n{chr(10).join(names)}"
Otro, por supuesto, es de '\n'.join
antemano y luego agregar el nombre en consecuencia:
n = "\n".join(names)
text = f"Winners are:\n{n}"
lo que da como resultado la misma salida.
Nota:
Esta es una de las pequeñas diferencias entre f
-strings y str.format
. En este último, siempre puede usar la puntuación siempre que se descomprima un dictado loco correspondiente que contenga esas claves:
>>> "{\\} {*}".format(**{"\\": 'Hello', "*": 'World!'})
"Hello World!"
(Por favor, no hagas esto).
En el primero, la puntuación no está permitida porque no puede tener identificadores que los usen.
Aparte: definitivamente optaría por print
o format
, como sugieren las otras respuestas, como alternativa. Las opciones que he dado solo se aplican si, por alguna razón, debe usar cadenas de f.
El hecho de que algo sea nuevo no significa que debas intentar hacer todo con él ;-)
f"Winners are:\n{chr(10).join(names)}"