如何在 f 字符串中使用换行符 '\\n' 在 Python 3.6 中格式化输出?

新手上路,请多包涵

我想知道如何使用 f 字符串以 Pythonic 方式格式化这种情况:

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

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

 Winners are:
Adam
Bob
Cyril

原文由 malmed 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

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

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

这在 F 字符串的 PEP 中指定:

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

一种选择是将 '\n' 分配给一个名称,然后将 .join 分配给 f 字符串中的名称;也就是说,不使用文字:

 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 字符串和 str.format 之间的细微差别之一。在后者中,您始终可以使用标点符号,前提是解压缩了包含这些键的相应古怪字典:

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

(请不要这样做。)

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


旁白:我肯定会选择 printformat ,正如其他答案所建议的那样。我给出的选项仅在您出于某种原因 必须 使用 f 弦时才适用。

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

原文由 Dimitris Fasarakis Hilliard 发布,翻译遵循 CC BY-SA 3.0 许可协议

您不需要 f-strings 或其他格式化程序来打印带有分隔符的字符串列表。只需使用 sep 关键字参数 print()

 names = ['Adam', 'Bob', 'Cyril']
print('Winners are:', *names, sep='\n')

输出:

 Winners are:
Adam
Bob
Cyril

也就是说,在这里使用 str.join() / str.format() 可以说比任何 f-string 变通方法更简单、更易读:

 print('\n'.join(['Winners are:', *names]))
print('Winners are:\n{}'.format('\n'.join(names)))

原文由 Eugene Yarmash 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏