<p>我找到了!^_^</p>
<p>在正常生活中,表达</p>
<pre><code>print {item: (yield ''.join([item, 's'])) for item in myset}
</code></pre>
<p>评估如下:</p>
<pre><code>def d(myset):
result = {}
for item in myset:
result[item] = (''.join([item, 's']))
yield result
print d(myset).next()
</code></pre>
<p>为什么<code>yield result</code>而不是<code>return result</code>?我认为有必要支持嵌套列表理解*如下所示:</p>
<pre><code>print {i: f.lower() for i in nums for f in fruit} # yes, it's works
</code></pre>
<p>那么,看起来像这个代码吗?</p>
<pre><code>def d(myset):
result = {}
for item in myset:
result[item] = (yield ''.join([item, 's']))
yield result
</code></pre>
<p>以及</p>
<pre><code>>>> print list(d(myset))
['as', 'cs', 'bs', 'ds', {'a': None, 'b': None, 'c': None, 'd': None}]
</code></pre>
<p>第一个将返回<code>''.join([item, 's'])</code>的所有值,最后一个将返回dict<code>result</code>。<code>yield</code>表达式的值是<code>None</code>,因此<code>result</code>中的值也是<code>None</code>。</p>
<p>*评估嵌套列表理解的更正确解释:</p>
<pre><code>print {i: f.lower() for i in nums for f in fruit}
# eval like this:
result = {}
for i, f in product(nums, fruit): # product from itertools
key, value = (i, f.lower())
result[key] = value
print result
</code></pre>