我编写了简单的装饰器,该装饰器打印传递给它的函数(例如“ 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/

10-12 16:29