2015-01-31 82 views
-1

我在研究quines时遇到了这个问题。我很好奇,想知道什么%%做下面的Python:这两个%在打印'%r k %% k'%'a'中做什么?

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

据我所知,%R取则传递参数的字符串表示(在这种情况下,“A”),并将其添加到带有字符串引号,所以在这种情况下,它会打印'a'k%k。我无法弄清楚k %% k做什么?如果我删除了其中一个%符号,则会出现错误。如果我没有%r,我也会得到一个错误。但是,当我有%r和两个%符号在ks(或任何字母表)之间时,它会打印出几乎相同的内容,但缺少一个%(在此情况下为k %% k)。这里发生了什么?

回答

3

%%是单个%字符的逃脱;你不能以其他方式使用的字符:

>>> '%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