我编写了简单的装饰器,该装饰器打印传递给它的函数(例如“ foo”),然后针对自身装饰它。因此,最后它会打印两个书面功能。
我最近读过有关奎因的文章,但对它的确切定义有些了解。例如,根据this source,“必须精确打印出程序员作为程序一部分编写的那些指令”。
所以我的问题是:我可以认为书面程序是一个奎因吗?
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
最后一位编辑Wikipedia定义的人,绝对不是。令人印象深刻,您已经很接近了,但是顺序很重要,您确实需要在输出底部找到这两个调用。
通常,要测试您的程序是否是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
从技术上讲,如果您直接通过解释器调用文件,则可以在输入和输出(即
#!/usr/bin/tclsh
)中忽略脚本语言文件顶部的shebang:tclsh my_quine.tcl > output
diff my_quine.tcl output
关于python - 那是奎因还是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58083301/