擅长:python、mysql、java
<p>不幸的是,Python使用Pythonic的“请求原谅比允许更容易”方法来解压返回的元组。也就是说,如果你有一个声明:</p>
<pre><code>a,b,c = f()
</code></pre>
<p>在幕后,它在做一些事情:</p>
<pre><code>try:
a = returned[0]
b = returned[1]
c = returned[2]
except IndexError:
raise ValueError('need more than k values to unpack')
try:
_ = returned[4]
except IndexError:
pass
else:
raise ValueError('too many values to unpack')
</code></pre>
<p>所以它动态地发现返回的值的数量。不幸的是,这使我们无法聪明地创建一种处理可变回报的新类型:</p>
<pre><code>class VariableReturn(object):
def __getitem__(self, index):
return ...
</code></pre>
<p>在Python3中,您可以按自己的要求做一些事情,但负担在调用者身上,而不是被调用的函数。函数应该总是返回相同数量的结果,但是我们将使用<a href="http://www.python.org/dev/peps/pep-3132/" rel="nofollow noreferrer">extended tuple unpacking</a>捕获剩余的结果,如<a href="https://stackoverflow.com/questions/749070/partial-list-unpack-in-python">this StackOverflow question</a>所示。你知道吗</p>
<p>使用这种方法,您可以返回任意多的结果,但在最大情况下,您需要始终至少返回所需的结果。其余的被压缩成一个尾随的元组。你知道吗</p>
<pre><code>a,*others = f()
a,b,*others = f()
a,b,c,*others = f()
</code></pre>