我知道我可以使用转义序列获取 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/