Python 字符串字面量那些有趣的坑

Python string literals are kinda funny

来做个小测验:r'asdf\'和 r'asdf\'' 哪行是有效的 Python 代码?答案可能出乎你的意料。第一行是语法错误,第二行才是合法的,生成的字符串内容甚至保留了反斜杠。这是因为 r 前缀定义了原始字符串字面量,反斜杠不会被转义,但词法分析规则依然要求字符串不能以反斜杠结尾,否则引号无法被识别为结束符。更有趣的是 f-string 的解析机制,它需要在花括号内调用完整的 Python 解析器,这意味着表达式里可以包含引号、多行代码甚至注释。不过,lambda 表达式和赋值表达式在 f-string 中必须加括号,否则会因为被冒号截断而报错。这些看似奇怪的规则背后,其实是实现层面的简化逻辑,却造就了 Python 字符串处理中不少令人啼笑皆非的边角案例。

在 f-string 中,lambda 表达式和赋值表达式必须被括号包裹,否则会因为冒号截断而报错,这确实有点有趣。

同日更多故事

2026-08-08