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

标签 python python-3.x newline python-3.6 f-string

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

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

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

Winners are:
Adam
Bob
Cyril

最佳答案

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

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

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

Backslashes may not appear inside the expression portions of f-strings, [...]

一个选项是将 '\n' 分配给一个名称,然后将 .join 分配给 f-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"获胜者是:\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!"

(请不要这样做。)

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


旁白:我肯定会选择 printformat,因为其他答案建议作为替代方案。我给出的选项仅在您出于某种原因必须使用 f 字符串时才适用。

仅仅因为一些东西是新的,并不意味着你应该尝试用它做任何事情;-)

关于python - 如何在 f-string 中使用换行符 '\n' 来格式化 Python 3.6 中的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44780357/

相关文章:

python - 在 Windows 10 上安装 gtk3 + glade

python - Pandas - 导入CSV问题 - 在末尾添加和删除0

python - 从多个列表中获取特定的字典属性值

c - 如何在换行符 "\t"之前将字符 "\n"添加到字符串中

php - 我可以通过仅替换 CR 来避免 CRLF 注入(inject)攻击吗?

c++ - Getline to String 也复制换行符

Python UDP 套接字服务器

python - WinCVS - Python - TCL

python - 在内置函数中赋值

python - python __getitem__()方法中LinkedList的实现