Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 那是奎因还是什么?_Python_Python 3.x_Decorator_Definition_Quine - Fatal编程技术网

Python 那是奎因还是什么?

Python 那是奎因还是什么?,python,python-3.x,decorator,definition,quine,Python,Python 3.x,Decorator,Definition,Quine,我编写了一个简单的decorator,它打印传递给它的函数(例如“foo”),然后根据自身对其进行修饰。所以最后它会打印两个写的函数 我最近读到了关于奎因的文章,但有点拘泥于它的精确定义。例如,根据奎因的说法,“必须精确地打印出程序员作为程序一部分编写的指令” 所以我的问题是:我能把书面程序看作是奎因吗? def decorate(function): from inspect import getsourcelines def wrapper(*args, **kwargs)

我编写了一个简单的decorator,它打印传递给它的函数(例如“foo”),然后根据自身对其进行修饰。所以最后它会打印两个写的函数

我最近读到了关于奎因的文章,但有点拘泥于它的精确定义。例如,根据奎因的说法,“必须精确地打印出程序员作为程序一部分编写的指令”

所以我的问题是:我能把书面程序看作是奎因吗?
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是一种计算机程序,它不接受任何输入,只产生自己的源代码副本作为其唯一输出

从上一个编辑维基百科定义的人来看,严格来说,没有。这是令人印象深刻的,你非常接近,但顺序很重要,你确实需要在输出的底部调用这两个调用

通常,要测试您的程序是否为奎因:

./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

如果您直接通过解释器调用脚本语言文件,您可以在输入和输出中(即
#!/usr/bin/tclsh
),在技术上省略脚本语言文件顶部的shebang:

tclsh my_quine.tcl > output
diff my_quine.tcl output
tclsh my_quine.tcl > output
diff my_quine.tcl output