【发布时间】:2016-01-09 08:46:05
【问题描述】:
找到了这个quine的例子:
s='s=%r;print(s%%s)';print(s%s)
我知道%s 和%r 执行str 和repr 函数,正如here 指出的那样,但是s%s 部分的确切含义以及quine 是如何工作的?
【问题讨论】:
找到了这个quine的例子:
s='s=%r;print(s%%s)';print(s%s)
我知道%s 和%r 执行str 和repr 函数,正如here 指出的那样,但是s%s 部分的确切含义以及quine 是如何工作的?
【问题讨论】:
s 设置为:
's=%r;print(s%%s)'
所以%r 被s%s 中的那个(保留单引号)和最后的%% 替换为一个%,给出:
s='s=%r;print(s%%s)';print(s%s)
因此是quine。
【讨论】:
%r 表示使用 repr() 函数,而不是 str() 函数 (%s)。见printf-style String Formatting。
运算符x % y 表示将值y 替换为格式字符串x,与C printf 相同。另请注意,%% 说明符代表文字 % 符号,因此格式字符串中的 s%%s 将打印为 s%s,并且不会捕获字符串。
【讨论】: