Reputation: 309
Found this example of quine:
s='s=%r;print(s%%s)';print(s%s)
I get that %s
and %r
do the str
and repr
functions, as pointed here, but what exactly means the s%s
part and how the quine works?
Upvotes: 19
Views: 3195
Reputation: 27577
s
is set to:
's=%r;print(s%%s)'
so the %r
gets replaced by exactly that (keeping the single quotes) in s%s
and the final %%
with a single %
, giving:
s='s=%r;print(s%%s)';print(s%s)
and hence the quine.
Upvotes: 19
Reputation: 541
The operator x % y
means substitute the value y
in the format string x
, same way as C printf. Also note that the %%
specifier stands for a literal % sign so s%%s
within the format string will print as s%s, and will not capture a string.
Upvotes: 4