s='s=%r;print(s%%s)';print(s%s)
我理解%的(但实际上谁取代?)也许更耐人寻味的是,为什么用s替换的东西在一个字符串print(s%%s)
成为print(s%s)
后自动%s
被换成了s
自己?
将"%%"
你在代码中看到的是“转换说明”对于上了年纪的字符串格式的printf风格。
大多数转换说明符告诉Python如何转换传递给%
format运算符的参数(例如,"%d"
说将下一个参数转换为十进制整数,然后再将其插入字符串)。
"%%"
有所不同,因为它直接转换为单个"%"
字符,而无需使用参数。格式字符串规范中需要进行此转换,因为否则,任何转换都"%"
将被视为其他代码的第一部分,并且没有简单的方法来产生包含百分号的字符串。
您显示的代码是一个quine(一个程序,它产生自己的代码作为输出)。运行时print(s%s)
,它将执行字符串格式化操作,其中格式字符串和单个参数都是相同的字符串s
。
"%r"
字符串中的in是一个转换说明符,它执行repr
其参数a。repr
在字符串上产生带引号的字符串。这是输出中带引号的字符串来自的地方。
在"%%"
生产%
操作两者之间出现s
在的print
电话。如果中仅"%"
包含一个s
,则会出现有关格式化操作的错误消息,需要第二个参数(因为这%s
是另一个转换说明符)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句