Non puoi. Le barre rovesciate non possono apparire all'interno delle parentesi graffe {}; così facendo si ottiene SyntaxError:
>>> f'{\}'
SyntaxError: f-string expression part cannot include a backslash
Questo è specificato nella PEP per F-stringhe:
I backslash potrebbero non apparire all'interno delle parti di espressione delle stringhe f, [...]
Un'opzione è assegnare '\n'un nome e poi .joinquello all'interno della fstringa; cioè senza usare un letterale:
names = ['Adam', 'Bob', 'Cyril']
nl = '\n'
text = f"Winners are:{nl}{nl.join(names)}"
print(text)
Risultati in:
Winners are:
Adam
Bob
Cyril
Un'altra opzione, come specificato da @wim, è usare chr(10)per essere \nrestituiti e poi unirsi lì.f"Winners are:\n{chr(10).join(names)}"
Ancora un altro, ovviamente, è '\n'.joinprima e poi aggiungere il nome di conseguenza:
n = "\n".join(names)
text = f"Winners are:\n{n}"
che si traduce nello stesso output.
Nota:
Questa è una delle piccole differenze tra f-strings e str.format. In quest'ultimo, puoi sempre usare la punteggiatura a condizione che venga decompresso un dict stravagante corrispondente che contiene quelle chiavi:
>>> "{\\} {*}".format(**{"\\": 'Hello', "*": 'World!'})
"Hello World!"
(Per favore, non farlo.)
Nel primo caso, la punteggiatura non è consentita perché non è possibile avere identificatori che li utilizzano.
A parte: opterei sicuramente per printo format, come suggeriscono le altre risposte come alternativa. Le opzioni che ho fornito si applicano solo se per qualche motivo devi usare le stringhe f.
Solo perché qualcosa è nuovo, non significa che dovresti provare a farci tutto ;-)
f"Winners are:\n{chr(10).join(names)}"