Skip to main content
 首页 » 编程设计

python之print(s%%s) 在这里是什么意思

2025年05月04日16mq0036

s='s=%r;print(s%%s)';print(s%s) 

我理解 % 是用 s 替换字符串中的某些内容(但实际上要替换谁?) 也许更有趣的是,为什么 print(s%%s) 在 %s 被 替换后自动变成 print(s%s) code>s 本身?

请您参考如下方法:

您在该代码中看到的 "%%" 是旧版 printf-style of string formatting 的“转换说明符” .

大多数转换说明符告诉 Python 如何将传递给 % 格式运算符的参数转换(例如,"%d" 表示将下一个参数转换为一个十进制整数,然后将其插入字符串)。

"%%" 不同,因为它直接转换为单个 "%" 字符而不消耗参数。在格式字符串规范中需要这种转换,否则任何 "%" 都将被视为其他代码的第一部分,并且没有简单的方法来生成包含百分号的字符串。

您显示的代码是一个 quine(一个生成自己的代码作为输出的程序)。当它运行 print(s%s) 时,它会执行字符串格式化操作,其中格式字符串和单个参数都是相同的字符串 s。

字符串中的 "%r" 是一个转换说明符,它对其参数进行 repr。 repr 对字符串生成带有引号的字符串。这是输出中引用的字符串的来源。

"%%" 生成出现在 print 中两个 之间的 % 运算符> 打电话。如果只有一个 "%" 包含在 s 中,您会收到关于格式化操作的错误,需要第二个参数(因为 %s是另一个转换说明符)。