我在研究quines时遇到过这个问题。我很想知道%%在下面的内容中做了什么
print '%r k%%k'%'a'
我理解%r采用传递的参数的字符串表示(在本例中为'a')并将其添加到带引号的字符串中,因此在这种情况下它会打印'a'k%k。我无法弄清楚k %% k的作用是什么?如果我删除其中一个%符号,我会收到错误。如果我没有%r,我也会收到错误。然而,当我有%r和两个%符号介于ks(或任何字母表)之间时,它打印出几乎相同的东西,但丢失一个%(在这种情况下k%k为k %% k)。这里发生了什么?
答案 0 :(得分:4)
%%
是单个%
字符的转义符;你无法使用那个角色:
>>> '%s: %%' % 'One percent character'
'One percent character: %'
请参阅String Formatting Operations documention:
%
没有转换参数,导致结果中出现'%'
个字符。
通过删除一个%
字符,您形成了%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