使用插值运算符时,为什么不能使用反斜杠来转义百分比字符

时间:2013-11-02 04:05:54

标签: python

如标题所述,为什么这不起作用:

print "Hello, my name is %s, I am %d\% confused!" % ("steve", 100)

我知道解决方案是使用%%来表示原始%,但为什么\%在使用插值运算符时不起作用?我假设这不是一些随机的设计决定,当然\在使用插值运算符时仍然会转义,如:

print "Hello, my name is %s\n, I am %d%% confused!" % ("steve", 100)

打印:

  

你好,我的名字是史蒂夫,我100%困惑!

2 个答案:

答案 0 :(得分:3)

这不是一个“随机”的设计决定。 \n is a standard C escape sequence;字符串格式的%不是。使用%代替\来逃避%会加强这种区别。

此外,Python's % string formatting (deprecated in Python 3.1) is based on C's sprintf是打印文字%%的{​​{1}}语法所在的位置。 请注意,这不是转义序列。第一个%不会逃脱第二个!与所有其他转换规范一样,第一个%引入转换说明符,第二个%是转换说明符。

有关详情,请参阅your friendly neighborhood man sprintf pages

答案 1 :(得分:2)

使用\进行转义是针对解析器的,它在创建字符串对象之前完成其工作,'\x5cn'将不会生成新行。 <{1}}用于创建对象后的格式化程序,%没问题。

如果使用'\x25s' % 'n'\%应如何转义?\%\\%将无效,使用\%%只是最糟糕的,最简单的解决方案是特殊角色逃脱,还有其他技术可以逃脱,请阅读Delimiter collision