Python作为一门严谨的编程语言,也充满了各种娱乐、恶搞、实用的彩蛋,程序员真的是一群创意无极限的家伙。笔者总结了Python中几个比较有趣的彩蛋。
1. Hello World
相传古时候有个退休的程序员,在家闲来无事,决定修习书法之道。第一日备好笔墨纸砚,便挥毫落纸写下一行大字:“hello, world”。hello world 是程序员学习一门新的编程语言的开始,而Python干脆把它嵌入到了内置模块中。
>>> import __hello__ Hello World...
到了python3,输出结果稍微有改动,把...
替换成了 !
>>> import __hello__ Hello World!
2. Python之禅
import this
中隐藏了一首《Python之禅》的诗,它是Python中的『八荣八耻』,作者是 Tim Peters ,每个有追求的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!
参考翻译:
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 way not be obvious at first unless you’re Dutch. 虽然一开始这种方法并不是显而易见的,但谁叫你不是Python之父呢。 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! 命名空间是个绝妙的想法,让我们多多地使用它们吧!
3. 反地心引力
import antigravity
是一个搞笑的彩蛋,它直接跳转到一副漫画网页xkcd.com/353/,漫画非常有意思,Cueball漂浮在天空中,一个朋友好奇的问他怎么飞起来的。
这个图的对话是:
Friend:哇!你在飞,怎么做到的?
Cueball:Python!
Cueball:我昨晚学的,非常简单
Cueball:运行 Hello World 只需要一句话:
print "Hello World!"
,Friend: 我不懂什么动态类型、空白符之类的?
Cueball:来,加入我们吧!Python编程很有乐趣,它是一个全新的世界
Friend: 但你是怎么飞起来的?
Cueball: 我就只是输入了
import antigravity
Friend: 就这样? (还是一脸不惑的表情)
Cueball: …嗯,我也对比了药品柜中的所有东西 (暗指Cueball对比过多种编程语言,但还是觉得Python最简单)
Cueball: 但我想这就是Python
4. 大括号替换缩进
Python与其他语言在语法上最大的不同就是代码块的结束方式,Python代码块简洁许多,一个类C语言的语法:
if (x > y) { x = 1; y = 2; }
在 Python 中等价的语句:
if x > y : x = 1 y =2
Python的目标之一就是让程序员少打些字,让生活多些乐趣。Python不需要像类C语言一样输入 begin/end
、 then/endif
或者 {}
来结束代码块,Python使用缩进来结束代码块。而braces
库算得上是Python中最恶搞的一个彩蛋了,如果你是从类C语言转过来的程序员,估计你是一时半会儿适应不了Python的缩进,那么是否有其他办法呢? braces
模块就是专门为C程序员准备的兼容方案。
>>> from __future__ import braces File "<stdin>", line 1 SyntaxError: not a chance
哈哈,被骗了吧,窃以为导入braces就可以使用大括号来结束代码块,Python告诉你的答案是:没门儿!
5. HTTPServer
如果想让身边的同事临时访问你电脑中的文件目录,通常的做法是搭一个共享目录出来供大家访问,不过你要是安装了Python,那么一切都变得简单很多了,只需要打开命令行窗口,切换到指定目录,执行:
python -m SimpleHTTPServer # python2 python -m http.server # python3
这是 Python 内置的一个简单 http server,方便自己、他人用浏览器来访问你的文件目录