3

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

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

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

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

印刷:

你好,我的名字是史蒂夫,
我百分百困惑!

4

2 回答 2

3

这不是一个“随机”的设计决定。\n是标准的 C 转义序列%for 字符串格式不是。使用%而不是\转义%加强了这种区别。

此外,Python 的%字符串格式(在 Python 3.1 中已弃用)是基于 C 的sprintf,这是%%打印文字的语法%起源的地方。请注意,这不是转义序列。%一个在这里逃不过第二个!与所有其他转换规范一样,第一个%引入了转换说明符,第二个%是转换说明符。

查看您友好的社区man sprintf页面了解更多信息。

于 2013-11-02T04:11:07.793 回答
2

Escaping with \ is for the parser, it does its job before the string object is created, '\x5cn' won't make a new line. While % is for the formater after the object is created, '\x25s' % 'n' is fine.

If \% is used, how should \% be escaped?, \\% or \%% won't work, using \\%% is just worst, the simplest solution is that the special character escapes itself, there are other techniques to escape, read here Delimiter collision.

于 2013-11-02T04:40:03.410 回答