Python: print '%r k%%k'%'a' 中的两个 % 符号是做什么用的?

Python: What does the two % signs in print '%r k%%k'%'a' do?

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

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

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

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

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

参见String Formatting Operations documention

%
No argument is converted, results in a '%' character in the result.

通过删除一个 % 字符,您形成了 %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