如标题所述,为什么这不起作用:
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%困惑!
答案 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}}语法所在的位置。 请注意,这不是转义序列。第一个%
不会逃脱第二个!与所有其他转换规范一样,第一个%
引入转换说明符,第二个%
是转换说明符。
答案 1 :(得分:2)
使用\
进行转义是针对解析器的,它在创建字符串对象之前完成其工作,'\x5cn'
将不会生成新行。 <{1}}用于创建对象后的格式化程序,%
没问题。
如果使用'\x25s' % 'n'
,\%
应如何转义?\%
或\\%
将无效,使用\%%
只是最糟糕的,最简单的解决方案是特殊角色逃脱,还有其他技术可以逃脱,请阅读Delimiter collision。