Python Quine 介绍

2023-09-22 04:15:00

一个Quine是一个产生其源代码作为输出的计算机程序。该程序不需要输入,并输出其源代码的副本。

Quine很有趣,因为它们似乎违背了编程的目的,即根据输入生成输出。在某些情况下,Quine可能是有帮助的,例如当您需要生成程序源代码的副本时。


运行Python Quine

创建一个Quine并不特别困难,但需要一些思考。基本思想是利用编程语言的内置功能输出程序的源代码。

在Python中,您可以使用内置的repr函数来输出给定对象的源代码。

当然,简单地对程序的源代码调用repr函数并不能产生一个有效的Quine,因为输出还将包括repr函数本身。为了解决这个问题,您可以使用一些技巧来创建一个不包括repr过程的自引用字符串。

一旦您有了一个自引用字符串,您可以打印它以生成一个有效的Quine,就是这样!只需几行简短的代码,您就可以创建一个具有其源代码副本的程序。

代码示例:

print((lambda s:s%s)('print((lambda s:s%%s)(%r))'))
print((_:='print((_:=%r)%%_)')%_)
exec(s:='print("exec(s:=%r)"%s)')

输出:

print((lambda s:s%s)('print((lambda s:s%%s)(%r))'))
print((_:='print((_:=%r)%%_)')%_)
exec(s:='print("exec(s:=%r)"%s)')

总结

Quine是用于创建其源代码输出的程序。名称来自于“quote”的单词,意味着逐字重复某些内容。

Quine用作测试编程语言处理自引用代码的能力。在Python中,编写Quine相对容易。

您只需要将代码用引号括起来,然后使用print语句输出代码即可。

更多推荐

时序预测 | MATLAB实现POA-CNN-LSTM鹈鹕算法优化卷积长短期记忆神经网络时间序列预测

时序预测|MATLAB实现POA-CNN-LSTM鹈鹕算法优化卷积长短期记忆神经网络时间序列预测目录时序预测|MATLAB实现POA-CNN-LSTM鹈鹕算法优化卷积长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料预测效果基本介绍MATLAB实现POA-CNN-LSTM鹈鹕算法优化卷积长短期记忆神经网络时

分布式系统的 38 个知识点

天天说分布式分布式,那么我们是否知道什么是分布式,分布式会遇到什么问题,有哪些理论支撑,有哪些经典的应对方案,业界是如何设计并保证分布式系统的高可用呢?1.架构设计这一节将从一些经典的开源系统架构设计出发,来看一下,如何设计一个高质量的分布式系统;而一般的设计出发点,无外乎冗余:简单理解为找个备胎,现任挂掉之后,备胎顶

你对lambda表达式的使用方法以及底层原理了解吗?

你对lambda表达式的使用方法以及底层原理了解吗?lambda表达式是什么?Lambda表达式是Java编程语言中引入的一种函数式编程的特性,它可以用更简洁的方式来表示匿名函数。Lambda表达式可以作为一种行内函数,用于替代传统的匿名内部类。Lambda表达式的基本语法如下:(parameters)->expres

Spring学习 (一): IoC容器

前言参考廖雪峰Spring教程一、什么是IoC容器容器的意思可以理解为一个提供供程序正常运行,提供各种依赖的组件的包的环境。IoC,控制反转,实际上就是将原本由代码编写者控制的各个对象(组件)的生命周期托管给底层的容器,应用层不需要一个个定义好什么时候初始化,什么时候析构释放,所有组件不再由应用程序自己创建和配置,而是

蓝牙核心规范(V5.4)10.10-BLE 入门笔记之SMP和安全性

蓝牙篇之蓝牙核心规范(V5.4)深入详解汇总1.概述SMP是安全管理器协议,用于蓝牙低功耗系统的安全管理。SMP协议定义了配对和Key的分发过程的实现,以及用于实现这些方法的协议和工具。SMP的内容主要是配对和Key的分发,然后用Key对链路或数据进行加密。安全管理器协议(SMP)是协议栈的安全管理器组件的一部分。它支

【Android】SVGAPlayer的使用介绍

背景客户需要通过SVG来做直播场景的炫酷动画。故调用得到如下的工具库:GIthub-SVAGPlayer组装通过xml组装到项目中,然后调用提供的api实现自己的需求即可。<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="http://s

9月13日扒面经

文章目录2)char可以存放汉字吗3)list,map,set区别是什么4)讲一下反射5)实现反射的类6)重载和重写区别7)类加载过程8)什么时候会内存泄漏9)子父类加载顺序10)String,StringBuilderStringBuffer区别,哪些是线程安全的,哪一个快一些11)线程创建方式,你常用的是哪个,为什

从0搭建夜莺v6基础监控告警系统(一):基础服务安装

文章目录1.写在前面1.1.官方文档传送门1.2.部署环境2.服务安装2.1.基础设置2.2.安装中间件2.3.安装nightingale-v62.4.安装VictoriaMetrics2.5.安装Categraf3.部署总结3.1.安装总结1.写在前面1.1.官方文档传送门项目介绍架构介绍仪表盘黄埔营培训计划相关信息

【OpenSSL】HMAC消息认证码

HMAC消息认证码哈希运算消息码(Hash-basedMessageAuthenticationCode)与密钥相关的单向散列函数应用在SSL协议中消息是否被正确传输消息完整性消息认证算法流程密钥填充0(填充到与散列函数分组长度一致)填充后的密钥与0X36做异或ipad与消息内容组合第一次与单向散列函数进行散列计算填充

HTTP 状态码

状态码状态码英文名称中文描述100Continue继续。客户端应继续其请求101SwitchingProtocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议200OK请求成功。一般用于GET与POST请求201Created已创建。成功请求并创建了新的资源202

【Spring Boot】拦截器学习笔记

一、普通拦截器1,新建类MyWebConfig实现WebMvcConfigurer,实现addInterceptors方法@OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){registry//不拦截哪些请求.excludePathPatter

热文推荐