_='_=%r;print _%%_';print _%_
Run Code Online (Sandbox Code Playgroud)
这是最短的python quine,还是可以做得更好?这个似乎改进了The Quine Page上的所有条目.
我不算琐碎的'空'程序,而且我不算Terry Reedy的提交,因为双引号(如果允许的话,"hello world"是一个quine?还是"'"那个问题? )
Gra*_*raa 47
我只想在这里离开(另存为exceptionQuine.py):
File "exceptionQuine.py", line 1
File "exceptionQuine.py", line 1
^
IndentationError: unexpected indent
Run Code Online (Sandbox Code Playgroud)
Mec*_*ail 20
从技术上讲,最短的Python quine是空文件.除了这个微不足道的案例:
由于Python的print会自动附加换行符,因此实际上是quine _='_=%r;print _%%_';print _%_\n(其中\n表示文件中的单个换行符).
小智 14
都
print open(__file__).read()
Run Code Online (Sandbox Code Playgroud)
任何涉及导入的东西都不是有效的quine,因为根据定义,quine不能接受任何输入.读取外部文件被认为是输入,因此quine无法读取文件 - 包括自身.
从记录上来说,从技术上讲,python中最短的quine是一个空白文件,但这也是一种欺骗行为.
pos*_*lem 10
在一个略微非字面的方法中,将"最短"表示为语句数量以及字符数的短,我在这里有一个不包括任何分号.
print(lambda x:x+str((x,)))('print(lambda x:x+str((x,)))',)
Run Code Online (Sandbox Code Playgroud)
在我看来,这是争辩,因为它是一个功能,而其他功能则是多功能的.有没有人这么短?
编辑:用户flornquake做了以下改进(用于repr()替换str()和削减 6个字符的反引号):
print(lambda x:x+`(x,)`)('print(lambda x:x+`(x,)`)',)
Run Code Online (Sandbox Code Playgroud)
Python 3.8
exec(s:='print("exec(s:=%r)"%s)')
Run Code Online (Sandbox Code Playgroud)
甚至更短:
print(__file__[:-3])
Run Code Online (Sandbox Code Playgroud)
并命名文件print(__file__[:-3]).py(Source)
编辑:实际上,
print(__file__)
Run Code Online (Sandbox Code Playgroud)
命名print(__file__)作品也是如此。
小智 6
这是另一个类似于postylem的答案。
Python 3.6:
print((lambda s:s%s)('print((lambda s:s%%s)(%r))'))
Run Code Online (Sandbox Code Playgroud)
Python 2.7:
print(lambda s:s%s)('print(lambda s:s%%s)(%r)')
Run Code Online (Sandbox Code Playgroud)
我会说:
print open(__file__).read()
Run Code Online (Sandbox Code Playgroud)