如果您打开Python解释器,并输入"import this",如您所知,它会打印:
Tim Peters的Python之禅
美丽胜过丑陋.
显式优于隐式.
简单比复杂更好.
复杂比复杂更好.
Flat优于嵌套.
稀疏优于密集.
可读性很重要.
特殊情况不足以打破规则.
虽然实用性胜过纯洁.
错误不应该默默地传递.
除非明确沉默.
面对模棱两可,拒绝猜测的诱惑.
应该有一个 - 最好只有一个 - 明显的方法来做到这一点.
虽然这种方式起初可能并不明显,除非你是荷兰人.
现在比永远好.
虽然从未往往比好正确的现在.
如果实施很难解释,这是一个坏主意.
如果实现很容易解释,那可能是个好主意.
命名空间是一个很棒的主意 - 让我们做更多的事情吧!
在python源代码(Lib/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 nera'g fcrpvny rabhtu gb oernx …Run Code Online (Sandbox Code Playgroud) 如果我对列表推导做了些什么,它会写入一个局部变量:
i = 0
test = any([i == 2 for i in xrange(10)])
print i
Run Code Online (Sandbox Code Playgroud)
这打印"9".但是,如果我使用生成器,它不会写入局部变量:
i = 0
test = any(i == 2 for i in xrange(10))
print i
Run Code Online (Sandbox Code Playgroud)
这打印"0".
这种差异有什么好的理由吗?这是设计决策,还是生成器和列表推导的实现方式的随机副产品?就个人而言,如果列表推导没有写入局部变量,那对我来说似乎更好.
Python中有一个众所周知的Easter Egg 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 …Run Code Online (Sandbox Code Playgroud)