擅长:python、mysql、java
<p>要么将它们放在一个列表中,并在末尾返回列表,要么<a href="http://docs.python.org/3.3/reference/simple_stmts.html#yield" rel="nofollow noreferrer">"yield"</a>它们(因此创建了一个生成器)。在</p>
<p>第一种方法:</p>
<pre><code>def f():
acc = []
for x in range(10):
acc.append(someFunctionOfX(x))
return acc
</code></pre>
<p>第二种方法:</p>
^{pr2}$
<p>可能最重要的区别是:如果对<code>someFunctionOfX</code>的任何调用在示例1中导致异常,则该函数不会返回任何内容。在示例2中,如果假设第5个值由于某种原因无法生成,那么前面的四个值已经生成,并且可能在调用方的上下文中使用。在</p>
<p>在这里您可以看到区别:</p>
<pre><code>def f():
acc = []
for x in range(-3, 4):
acc.append (2 / x)
return acc
def g():
for x in range(-3, 4):
yield 2 / x
def testF():
for x in f(): print(x)
def testG():
for x in g(): print(x)
</code></pre>
<p>调用<code>testF</code>只会失败(zeromdivisionerror:division by zero),并且不会打印任何内容。调用<code>testG</code>打印</p>
<pre><code>-0.6666666666666666
-1.0
-2.0
</code></pre>
<p>然后失败(ZeroDivisionError:被零除)。在</p>
<hr/>
<p>我的(非常个人的)返回列表或生成值的标准如下:如果我需要存储在某个地方的数据,我返回一个列表。如果我只需要处理每个成员,我就放弃它们。在</p>