我想知道如何使用 f-strings 以 Pythonic 方式格式化这个案例:
names = ['Adam', 'Bob', 'Cyril'] text = f"Winners are:\n{'\n'.join(names)}" print(text)
问题是'\'不能在{...}f 字符串的表达式部分中使用。预期输出:
'\'
{...}
Winners are: Adam Bob Cyril
你不能。反斜杠不能出现在花括号内{};这样做会导致SyntaxError:
{}
SyntaxError
>>> f'{\}' SyntaxError: f-string expression part cannot include a backslash
这是在PEP中为 f 字符串指定的:
反斜杠可能不会出现在 f 字符串的表达式部分中,[…]
一种选择是分配'\n'一个名称,然后.join在f-string 内分配该名称;也就是说,不使用文字:
'\n'
.join
f
names = ['Adam', 'Bob', 'Cyril'] nl = '\n' text = f"Winners are:{nl}{nl.join(names)}" print(text)
结果是:
@wim 指定的另一个选项是用于chr(10)返回\n然后加入那里。f"Winners are:\n{chr(10).join(names)}"
chr(10)
\n
f"Winners are:\n{chr(10).join(names)}"
当然,另一个方法是'\n'.join预先添加相应的名称:
'\n'.join
n = "\n".join(names) text = f"Winners are:\n{n}"
这导致相同的输出。
这是f-strings 和str.format. 在后者中,您始终可以使用标点符号,前提是已解压缩包含这些键的相应古怪字典:
str.format
>>> "{\\} {*}".format(**{"\\": 'Hello', "*": 'World!'}) "Hello World!"
(请不要这样做。)
在前者中,标点符号是不允许的,因为您不能拥有使用它们的标识符。
旁白:我肯定会选择printor format,正如其他答案所暗示的那样。我给出的选项仅适用于您出于某种原因 必须 使用 f 字符串的情况。
print
format
仅仅因为某些东西是新的,并不意味着您应该尝试用它做所有事情;-)