擅长:python、mysql、java
<p>在<code>set(...)</code>里面的东西叫做a<em><a href="https://docs.python.org/3/reference/expressions.html#grammar-token-generator-expression" rel="nofollow noreferrer">generator expression</a></em>。当出现“裸”时,它们需要用括号括起来,但当它们作为函数调用的单个参数出现时,括号可以省略</p>
<p>生成器表达式返回一个<em>生成器</em>,该生成器根据需要将生成一系列值。在这种情况下,<code>set()</code>函数将执行要求的操作,并构建一个列示结果的函数。(因此,您不需要显式<code>.add</code>的原因是,您提供了一系列值来构建集合。)</p>
<p>(我想你也可以用a<em><a href="https://docs.python.org/3/reference/expressions.html#grammar-token-set-display" rel="nofollow noreferrer">set display</a></em>写<code>cylinders = {d['cyl'] for d in mpg}</code>)</p>
<p>那么如何在生成器表达式中打印内容呢?嗯,在<code>for</code>之前的东西必须是一个表达式;只产生一个值的东西。您可以使用一个辅助功能:</p>
<pre><code>def print_and_return(x):
print(x)
return x
cyls = set(print_and_return(d['cyl']) for d in mpg)
</code></pre>