-1

我在研究quines时遇到了这个问题。我很想知道 %% 在下面做了什么

print '%r k%%k'%'a'

我知道 %r 采用传递的参数的字符串表示形式(在本例中为“a”)并将其添加到带引号的字符串中,因此在本例中它打印“a”k%k。我不知道 k%%k 做了什么?如果我删除其中一个 % 符号,我会收到错误消息。如果我两者都没有 %r,我也会收到错误消息。但是,当我在 ks(或任何字母表)之间同时有 %r 和两个 % 符号时,它会打印出几乎相同的内容,但缺少一个 %(在这种情况下,k%k 表示 k%%k)。这里发生了什么?

4

1 回答 1

4

%%是单个%字符的转义;您不能以其他方式使用该字符:

>>> '%s: %%' % 'One percent character'
'One percent character: %'

请参阅字符串格式化操作文档

%
不转换任何参数,在结果中产生一个'%'字符。

通过删除一个%字符,您形成了%k格式,但没有转换类型k。错误消息反映:

>>> '%k' % 'No such format type'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: unsupported format character 'k' (0x6b) at index 1
于 2015-01-31T19:06:33.270 回答