<p>不确定它是否算作“优雅”,但您可以构建结果<code>tuple</code>的<code>list</code>,然后使用<code>zip</code>按返回位置而不是按调用号将它们分组到<code>tuple</code>,然后可选地<code>map</code>将这些<code>tuple</code>转换为最终的数据类型。例如,对于<code>numpy</code><code>array</code>:</p>
<pre><code>from future_builtins import map, zip # Only on Python 2, to minimize temporaries
import numpy as np
def func(x):
'Dumb function to return tuple of powers of x from 1 to 27'
return tuple(x ** i for i in range(1, 28))
# Example inputs for func
data = [np.array([[x]*10]*10, dtype=np.uint8) for in range(10)]
# Output is generator of results for each call to func
outputs = map(func, data)
# Pass each complete result of func as a positional argument to zip via star
# unpacking to regroup, so the first return from each func call is the first
# group, then the second return the second group, etc.
positional_groups = zip(*outputs)
# Convert regrouped data (`tuple`s of 2D results) to numpy 3D result type, unpack to names
arr1,arr2,arr3,arr4,arr5, ...,arr27 = map(np.array, positional_groups)
</code></pre>
<p>如果在给定位置从func返回的元素可能有不一致的维度(例如,一个调用可能返回10x10作为第一个返回,另一个返回5x5),那么您应该避免最后的<code>map</code>步骤(因为<code>array</code>没有一致的维度,只需将第二个到最后一个步骤替换为:</p>
<pre><code>arr1,arr2,arr3,arr4,arr5, ...,arr27 = zip(*outputs)
</code></pre>
<p>使<code>arr#</code>成为<code>tuple</code>的2D <code>array</code>,或者如果需要可变:</p>
<pre><code>arr1,arr2,arr3,arr4,arr5, ...,arr27 = map(list, zip(*outputs))
</code></pre>
<p>使它们成为2D <code>array</code>的<code>list</code></p>