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 .join
quello all'interno della f
stringa; 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 \n
restituiti e poi unirsi lì.f"Winners are:\n{chr(10).join(names)}"
Ancora un altro, ovviamente, è '\n'.join
prima 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 print
o 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)}"