python输出代码_):Python 输出自身的 4 种写法

孔乙己:回字有四样写法 —— 回、囘、囬、口中目 (康熙字典)

如果有人问如何写一段 Python,其输出是它代码自身,额外的要求输出不能为空 (空代码输出也为空)

不能使用文件操作

不显式的 import 任何库

这里也给出四种写法(使用 Python3 作为示例)

第一种

quotation = chr(0x22)

newline = chr(0x0a)

s = "quotation = chr(0x22){0}newline = chr(0x0a){0}{0}s = {1}{2}{1}{0}s = s.format(newline, quotation, s){0}{0}print(s)"

s = s.format(newline, quotation, s)

print(s)

这种方式使用了 3 个字符串格式化占位符,其中 1 个用来表示字符串本身,另外 2 个使用 ascii 码来表示 换行 (0x0a),双引号(0x0a)。但是如果换行不是 '\n',这代码就要改改了,比如在 windows 平台换行是 '\r\n'

那么第一个问题 —— 为什么我们要使用 ascii 码,而不直接使用字面量 \n 和 "

第二种

quotation = chr(0x27) + chr(0x27) + chr(0x27)

s = '''quotation = chr(0x27) + chr(0x27) + chr(0x27)

s = {0}{1}{0}

s = s.format(quotation, s)

print(s)'''

s = s.format(quotation, s)

print(s)

这种方法使用 『三引号』 字符串的特性来避免使用 换行的 ascii 码,所以无论是什么平台,只要保持代码中所有换行一致即可

那么第二个问题 ——『三引号』的特性是什么?

第三种

quotation = "''""'"

s = '''quotation = "''""'"

s = {0}{1}{0}

s = s.format(quotation, s)

print(s)'''

s = s.format(quotation, s)

print(s)

这种方法把引号的 ascii 码也移除了

那么第三个问题 ——

"''""'"

是什么意思了,为什么要这样写

第四种

s = '''s = """{0}"""

s = s.replace('"', "'", 6).format(s)

print(s)'''

s = s.replace('"', "'", 6).format(s)

print(s)

这种方法只使用了一个字符串格式化的占位符,额外使用了一个 replace 命令

那么第四个问题 —— replace 第三个参数是什么意思,如果去掉了会发生什么事?

结语

实际上,输出自身的写法不止这四种,只要把握其中两点即可有个字符串看起来和 print 出来是一样的

这个字符串在满足第一点的前提下,可以通过一定方式转换为字符串以外的代码

有兴趣可以想想还有什么其他写法,^*^

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值