小编典典

如何在 f-string 中使用换行符 '\n' 来格式化 Python 3.6 中的输出?

all

我想知道如何使用 f-strings 以 Pythonic 方式格式化这个案例:

names = ['Adam', 'Bob', 'Cyril']
text = f"Winners are:\n{'\n'.join(names)}"
print(text)

问题是'\'不能在{...}f 字符串的表达式部分中使用。预期输出:

Winners are:
Adam
Bob
Cyril

阅读 209

收藏
2022-07-04

共1个答案

小编典典

你不能。反斜杠不能出现在花括号内{};这样做会导致SyntaxError

>>> f'{\}'
SyntaxError: f-string expression part cannot include a backslash

这是在PEP中为 f
字符串指定的:

反斜杠可能不会出现在 f 字符串的表达式部分中,[…]

一种选择是分配'\n'一个名称,然后.joinf-string 内分配该名称;也就是说,不使用文字:

names = ['Adam', 'Bob', 'Cyril']
nl = '\n'
text = f"Winners are:{nl}{nl.join(names)}"
print(text)

结果是:

Winners are:
Adam
Bob
Cyril

@wim 指定的另一个选项是用于chr(10)返回\n然后加入那里。f"Winners are:\n{chr(10).join(names)}"

当然,另一个方法是'\n'.join预先添加相应的名称:

n = "\n".join(names)
text = f"Winners are:\n{n}"

这导致相同的输出。

笔记:

这是f-strings 和str.format. 在后者中,您始终可以使用标点符号,前提是已解压缩包含这些键的相应古怪字典:

>>> "{\\} {*}".format(**{"\\": 'Hello', "*": 'World!'})
"Hello World!"

(请不要这样做。)

在前者中,标点符号是不允许的,因为您不能拥有使用它们的标识符。


旁白:我肯定会选择printor format,正如其他答案所暗示的那样。我给出的选项仅适用于您出于某种原因 必须 使用 f 字符串的情况。

仅仅因为某些东西是新的,并不意味着您应该尝试用它做所有事情;-)

2022-07-04