17

有没有一种简单的方法可以让函数返回一个 np.array 和一个变量?

例如:

my_array = np.zeros(3)
my_variable = 0.

def my_function():
    my_array = np.array([1.,2.,3.])
    my_variable = 99.
    return my_array,my_variable

my_function()

以便函数中计算的值可以在以后的代码中使用?以上忽略了函数中计算的值。

我尝试返回一个元组 {my_array, my_variable} 但得到了 np.array 的不可散列类型消息

DN

4

4 回答 4

17

你的功能是正确的。当您编写时return my_array,my_variable,您的函数实际上是返回一个元组(my_array, my_variable)

您可以首先将 的返回值分配my_function()给一个变量,这就是我描述的这个元组:

result = my_function()

接下来,由于您提前知道元组中有多少项,您可以将元组解压缩为两个不同的值:

result_array, result_variable = result

或者您可以在一行中完成:

result_array, result_variable = my_function()

与返回元组和元组解包相关的其他注意事项:

如果我的函数可以None在非异常失败或空情况下返回,我有时会将这两个步骤分开:

result = my_function()
if result == None:
    print 'No results'
    return
a,b = result
# ...

除了解包,您还可以使用它们的索引从元组中访问指定的项目:

result = my_function()
result_array = result[0]
result_variable = result[1]

如果出于某种原因您有一个 1 项元组:

return (my_variable,)

你可以用同样的(有点尴尬的)单逗号语法来解压它:

my_variable, = my_function()
于 2013-10-22T01:27:27.720 回答
12

它没有忽略返回的值,您没有将它们分配给变量。

my_array, my_variable = my_function()
于 2013-10-22T01:26:41.823 回答
1

简单的答案

my_array, my_variable = my_function()
于 2013-10-22T01:24:14.517 回答
0

在定义 my_function 之后,使用 my_function = np.vectorize(my_function)。
例如,

def jinc(x):
    if x == 0.0:
        return 1
    return 2*j1(x)/x

jinc = np.vectorize(jinc)
于 2018-07-11T09:56:46.617 回答