python - 是奎宁还是什么?
问题描述
我编写了简单的装饰器,它打印传递给它的函数(例如“foo”),然后我自己装饰它。所以最后它打印了两个书面函数。
我最近读过关于 quines 的文章,有点坚持它的精确定义。例如,根据这个来源,一个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
由最后一个编辑维基百科定义的人去,而不是严格意义上的 no 。这令人印象深刻,而且您非常接近,但顺序很重要,您确实需要输出底部的这两个调用。
通常,要测试您的程序是否为 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 - groupby 一列并找到该列和其他列的计数并找到两者的商
- python - 我试图通过从客户端发送他想要发送到我的服务器的数据来创建代理服务器,然后我的服务器将其发送到想要的服务器
- html - 连续被视为一个
- python - 根据python中的日期过滤字典?
- python - 在 python 中使用 Multiprocessing 对具有多个参数的函数进行多次迭代,返回多个值
- node.js - JSON 转换仅返回 JSON 对象中的第一项
- python - 如何将这个 for 循环概括为任何长度?
- c++ - 在移动构造函数中切片对象
- css - 当数字图像(项目)可变时,如何将我的指示器项目居中在滑块中?
- ios - 将离子反应应用程序的 razorpay 网关与 iOS 中的 Ionic 4 和电容器集成