print(s %% s)在这里意味着什么?

时间:2015-01-26 06:28:42

标签: python

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

我理解%是用s替换字符串中的东西(但实际上要替换谁?) 也许更有趣的是,为什么print(s%%s)print(s%s)替换为%s之后自动成为s

2 个答案:

答案 0 :(得分:5)

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

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

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

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

字符串中的"%r"是一个转换说明符,用于执行其参数的repr。字符串上的repr生成带有引号的字符串。这是引用字符串来自输出的地方。

"%%"生成%运算符,该运算符出现在s调用中的两个print之间。如果"%"中只包含一个s,则会出现关于格式化操作的错误,期望第二个参数(因为%s是另一个转换说明符)。

答案 1 :(得分:1)

print '% %s' % '' #wrong
print '%% %s' % '' #correct and print '% '

想想\\和\。