[Python] 一行代码让你明白什么叫艺术

什么样的程序是好的?

如何编写漂亮的代码?

这是学习编程一段时间最经常提出的问题,却最难回答。程序设计语言如同自然语言一样,好的代码就像文学作品,不仅达意,更要优美。

那什么是“好”? 什么是“优美”?

今天,我就用一行代码来回答你。

领悟编程代码优美的过程类似参禅,除了不断练习,也需要理解一些原则。

Python 编译器以函数库的形式内置了一个有趣的文件,被称为 “Python之禅” (The Zen of Python)。当调用如下一行语句后,会出现一段有趣的运行结果。

import this

程序执行结果如下:

The Zen of Python, by Tim Peters   Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren’t special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you’re Dutch. Now is better than never. Although never is often better than right now. If the implementation is hard to explain, it’s a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea – let’s do more of those!

好的程序代码不仅能够完成功能,也是一件艺术作品。对于程序员来说,大多数时间在阅读并修改代码,好的代码可读性能将这种阅读变成一种享受。

如何能够编写好的代码呢?

请大家首先熟练掌握一门语言,如 Python;其次,要阅读一定量优质的代码,思考这些代码的编程思路和风格;最后,选择一个有兴趣的项目编写代码、修改、再修改,直到你认为它是个作品为止。

除了 Python 之禅所表达的 Python 设计理念,该程序还有另一段魅力。 我们可以在 Python 安装目录中找到 Lib/this.py 文件,忘记安装位置的小伙伴可以在安装 PyCharm 的盘中搜索 this.py 就可以搜索出来,该程序内容如下:

s = """Gur Mra bs Clguba, ol Gvz Crgref

Ornhgvshy vf orggre guna htyl.
Rkcyvpvg vf orggre guna vzcyvpvg.
Fvzcyr vf orggre guna pbzcyrk.
Pbzcyrk vf orggre guna pbzcyvpngrq.
Syng vf orggre guna arfgrq.
Fcnefr vf orggre guna qrafr.
Ernqnovyvgl pbhagf.
Fcrpvny pnfrf nerag fcrpvny rabhtu gb oernx gur ehyrf.
Nygubhtu cenpgvpnyvgl orngf chevgl.
Reebef fubhyq arire cnff fvyragyl.
Hayrff rkcyvpvgyl fvyraprq.
Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.
Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.
Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbher Qhgpu.
Abj vf orggre guna arire.
Nygubhtu arire vf bsgra orggre guna *evtug* abj.
Vs gur vzcyrzragngvba vf uneq gb rkcynva, vgf n onq vqrn.
Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.
Anzrfcnprf ner bar ubaxvat terng vqrn -- yrgf qb zber bs gubfr!"""

d = {
          
   }
for c in (65, 97):
    for i in range(26):
        d[chr(i+c)] = chr((i+13) % 26 + c)

print("".join([d.get(c, c) for c in s]))

该程序第 1 到第 21 行是一个字符串 s,但该字符串并非明文。将 s 转换成明文内容的代码是从第 23 行到第 28 行。在这些代码中,可以看到字典、列表和元组类型,下面我们逐行来分析这个代码的功能。

第 23 行定义了一个空字典 d,第 26 行对字典 d 填充了内容,这个填充将i+c 对应的字符替换为 (i+13)%26 +c,即将编号循环增加了 13。chr(65) 代表字符 ‘A’,chr(97) 代表字符 ‘a’,因此,第 23 到第 26 行建立了字母 a 到 z 和字母 A 到 Z 的一个 13 位循环移动的对应表,如下所示:

密文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

密文:a b c d e f g h i j k l m n o p q r s t u v w x Y z

🧸这次的分享就到这里啦,继续加油哦^^ 🍭有出错的地方欢迎在评论区指出来,共同进步,谢谢啦
经验分享 程序员 微信小程序 职场和发展