python - 那是奎因还是什么?

标签 python python-3.x decorator definition quine

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

相关文章:

python - 如何将 Cython 安装为该程序的依赖项?

python - 如果一个任务失败,如何取消收集中的所有剩余任务?

python - QMediaContent 如何在 urllib 无法下载时显示视频?

typescript 装饰二传手功能

python - 我的时间戳字符串末尾有 "-05:00",这是什么意思,我该如何处理?

python - 添加二进制数 Python

python - 决策树只预测一类

python - 使用 __import__ 从同名模块导入对象

python - 如何返回带有向后参数的新函数

python - 如何使用 python-decorator 包来装饰类方法?