python - 使用 % 和转义序列的字符串格式化之间的奇怪交互。 Python

标签 python string-formatting

我知道我可以使用转义序列获取 unicode 字符,如下所示:

>>> print "\3"
♥

我只是想查看可用的 ASCII 字符并写下:

for i in xrange(1, 99):
    print "\%o" % i

它会打印“\1”、“\2”、“\3”等,所以不是 unicode 字符。然后我尝试使用 %s、%r 和 %d,但这些似乎都不起作用。

这比看到可用的 ASCII 字符有趣得多,所以我开始阅读有关字符串格式化的内容,并最终完成了这篇文章:

for i in xrange(1, 99):

    print "{:c}".format(i)

问题是 - 为什么初始代码不起作用?

最佳答案

字符串文字中的转义序列在“解析时”处理,而不是在“运行时”处理。 如果你写

"\%o"

Python 解析器看到一个反斜杠后跟一个百分号,因为这不是一个有效的转义序列,它只会保留这两个字符,然后还会将 o 添加为一个普通字符(请注意,在此Python 不同于 C++ 编程语言,它会将该字符串解释为 "%o",因为在该语言中,百分号前的反斜杠仅被解释为百分号)。

在运行时,格式化运算符将在左侧看到一个由三个字符、一个反斜杠和一个 %o 序列组成的字符串,这部分将被右侧替换例如,为输入值 1 提供字符串 "\\1",该字符串显示为 \1

关于python - 使用 % 和转义序列的字符串格式化之间的奇怪交互。 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12447551/

相关文章:

java - 如何用一个空行替换多个空格和换行符

go - "safely escaped with Go syntax"是什么意思?

python - 鸭打字麻烦。 "i-am-like-a-list"的鸭子打字测试

java - 如何格式化字符串以打印 4 位数字和 2 位小数

python - 当我修改正在运行的 python 程序的源代码时会发生什么?

c++ - 如何在使用 TCP 的序列化/反序列化中避免跨语言依赖?

python - 使用精确匹配正则表达式时格式化 Python 中的原始字符串

python - 如何将 tuple1 if ... else tuple2 传递给 str.format?

python - 将先前 sklearn 管道步骤中的对象属性作为参数传递给下一步方法

python - 求解大数的模线性同余