我编写了简单的装饰器,它打印传递给它的函数(例如“foo”),然后我对其自身进行装饰。所以最后它打印了两个编写的函数。
我最近读到了关于奎因的内容,并且有点坚持它的精确定义。例如根据this source quine“必须精确地打印出程序员作为程序的一部分编写的那些指令”。
所以我的问题是:我可以将编写的程序视为 quine 吗?
def decorate(function):
from inspect import getsourcelines
def wrapper(*args, **kwargs):
for line_num, code_line in enumerate(getsourcelines(function)[0]):
print(code_line)
return wrapper
@decorate
def foo(bar1, bar2=777):
print("bar")
foo(None)
decorate(decorate)(decorate)
精确输出为:
@decorate
def foo(bar1, bar2=777):
print("bar")
def decorate(function):
from inspect import getsourcelines
def wrapper(*args, **kwargs):
for line_num, code_line in enumerate(getsourcelines(function)[0]):
code_line = code_line.replace('\n', '')
print(code_line)
return wrapper
最佳答案
quine 是一种计算机程序,它不接受任何输入,而是生成自己源代码的副本作为其唯一输出 1
按照最后编辑维基百科定义的人的说法,绝对不是。这令人印象深刻,而且已经非常接近了,但是顺序很重要,并且您确实需要在输出的底部调用这两个调用。
一般来说,要测试您的程序是否是 quine:
./my_quine > output
diff my_quine output # should result in no differences
如果您不使用脚本语言,显然可能需要执行一些小步骤:
cc my_quine.c -o my_quine
./my_quine > output
diff my_quine.c output
或
javac MyQuine.java
java MyQuine > output
diff MyQuine.java output
如果您通过解释器调用该文件,从技术上讲,您可以在输入和输出中省略脚本语言文件顶部的 shebang(即 #!/usr/bin/tclsh
)直接:
tclsh my_quine.tcl > output
diff my_quine.tcl output
关于python - 那是奎因还是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58083301/