【发布时间】:2019-01-17 10:42:33
【问题描述】:
在 Python >=3.6 中,可以使用 f 字符串替代 str.format 方法。举个简单的例子,这些是等价的:
'{} {}'.format(2+2, "hey")
f'{2+2} {"hey"}'
忽略format specifiers,我基本上可以将str.format 的位置参数移动到f 字符串中的大括号内。请特别注意,我可以只在此处输入 str 文字,尽管它可能看起来有点笨拙。
但是有一些限制。具体来说,backslashes in any shape or form 不允许在 f 字符串的大括号内:
'{}'.format("new\nline") # legal
f'{"new\nline"}' # illegal
f'{"\\"}' # illegal
如果它在大括号内,我什至不能使用\ 来拆分长线;
f'{2+\
2}' # illegal
尽管\ 的这种用法完全允许在普通str 中使用;
'{\
}'.format(2+2) # legal
在我看来,如果解析器在 f 字符串的大括号内看到 \ 字符,则硬停止被编码到解析器中。为什么要实施此限制?尽管docs 指定了这种行为,但它并不能说明原因。
【问题讨论】:
-
@miradulo 请将其发布为答案。
-
@Bakuriu 我要在大约 30 秒后 AFK,如果您愿意,可以自己发布。
-
我也认为这违反了“最小惊讶原则”。实际上我很惊讶它不接受“\n”字符。我写 Ruby 代码是为了生活,你可以在
#{}interpolation 中编写各种语法正确的 Ruby 代码
标签: python python-3.x string-formatting backslash f-string