回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在读另一个关于堆栈溢出(<a href="https://stackoverflow.com/questions/228181/zen-of-python">Zen of Python</a>)的问题,在Jaime Soriano的回答中我遇到了这一行:</p>
<pre><code>import this
"".join([c in this.d and this.d[c] or c for c in this.s])
</code></pre>
<p>在Python shell中输入上述内容将打印:</p>
^{pr2}$
<p>所以我不得不花整个上午的时间去理解上面的清单。。。理解。。。事情。我不太清楚地声明它是模糊的,但这仅仅是因为我只编写了一个半月的程序,所以不确定这种构造在python中是否很常见。在</p>
<p><code>this.s</code>包含上述打印输出的编码版本:</p>
<pre><code>"Gur Mra bs Clguba, ol Gvz Crgref\n\nOrnhgvshy vf orggre guna htyl.\nRkcyvpvg vf orggre guna vzcyvpvg.\nFvzcyr vf orggre guna pbzcyrk.\nPbzcyrk vf orggre guna pbzcyvpngrq.\nSyng vf orggre guna arfgrq.\nFcnefr vf orggre guna qrafr.\nErnqnovyvgl pbhagf.\nFcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.\nNygubhtu cenpgvpnyvgl orngf chevgl.\nReebef fubhyq arire cnff fvyragyl.\nHayrff rkcyvpvgyl fvyraprq.\nVa gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.\nGurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.\nNygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.\nAbj vf orggre guna arire.\nNygubhtu arire vf bsgra orggre guna *evtug* abj.\nVs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.\nVs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.\nAnzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!"
</code></pre>
<p>并且<code>this.d</code>包含一个字典,其中的密码对<code>this.s</code>进行解码:</p>
<pre><code>{'A': 'N', 'C': 'P', 'B': 'O', 'E': 'R', 'D': 'Q', 'G': 'T', 'F': 'S', 'I': 'V', 'H': 'U', 'K': 'X', 'J': 'W', 'M': 'Z', 'L': 'Y', 'O': 'B', 'N': 'A', 'Q': 'D', 'P': 'C', 'S': 'F', 'R': 'E', 'U': 'H', 'T': 'G', 'W': 'J', 'V': 'I', 'Y': 'L', 'X': 'K', 'Z': 'M', 'a': 'n', 'c': 'p', 'b': 'o', 'e': 'r', 'd': 'q', 'g': 't', 'f': 's', 'i': 'v', 'h': 'u', 'k': 'x', 'j': 'w', 'm': 'z', 'l': 'y', 'o': 'b', 'n': 'a', 'q': 'd', 'p': 'c', 's': 'f', 'r': 'e', 'u': 'h', 't': 'g', 'w': 'j', 'v': 'i', 'y': 'l', 'x': 'k', 'z': 'm'}
</code></pre>
<p>据我所知,Jaime代码中的执行流程是这样的:<br/>
1循环<code>c for c in this.s</code>将一个值赋给c<br/>
2如果语句<code>c in this.d</code>的计算结果为True,则“and”语句执行其最右边的任何内容,在本例中是<code>this.d[c]</code>。<br/>
三。如果语句<code>c in this.d</code>的计算结果为False(这在Jaime的代码中从未发生过),那么“or”语句将执行其最右边的任何内容,在本例中是循环<code>c for c in this.s</code>。在</p>
<p>我说得对吗?在</p>
<p>即使我对处决的顺序是正确的,这仍然给我留下一大堆问题。为什么<;1>;是第一个要执行的事情,即使它的代码在多个条件语句之后的最后一行?换句话说,为什么<code>for</code>循环开始执行并赋值,但实际上只在代码执行的稍后点返回值(如果有的话)?在</p>
<p>另外,为了加分,禅宗档案里关于荷兰人的奇怪的一行是怎么回事?在</p>
<p><strong>编辑:</strong>虽然现在说出来让我感到羞耻,但直到三秒钟前,我还以为Guido van Rossum是意大利人。在读了他的维基百科文章后,我至少理解了,如果不能完全理解的话,为什么会有这句话。在</p>