擅长:python、mysql、java
<p>你应该这样读:</p>
<pre><code>for y in l:
for x in y:
yield x
</code></pre>
<p>这是生成器版本,但是所有的理解都有相同的基本语法:当<code>x</code>放在前面时,表达式的其余部分仍然从左到右读取。一开始我也被这弄糊涂了,以为它会反过来,但一旦添加了过滤表达式,这就有意义了:</p>
^{pr2}$
<p>现在想象一下,把这整件事都写反了:</p>
<pre><code>[x if isinstance(x, int)
for x in y
if len(y) < 4
for y in l]
</code></pre>
<p>这甚至会让资深的Prolog程序员感到困惑,更不用说维护Python解析器的人了:)</p>
<p>当前的语法也与<a href="http://wiki.python.org/moin/PythonVsHaskell" rel="nofollow">Haskell</a>中的语法相匹配,这首先启发了列表理解。在</p>