有一种简单的方法可以让函数返回一个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
答案 0 :(得分:12)
你的功能是正确的。当您编写return my_array,my_variable
时,您的函数实际上正在返回元组(my_array, my_variable)
。
您可以先将my_function()
的返回值赋给变量,这将是我描述的元组:
result = my_function()
接下来,既然您知道元组中有多少项目,那么您可以unpack the tuple分为两个不同的值:
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]
如果出于任何原因你有一个单项元组:
return (my_variable,)
您可以使用相同(稍微笨拙)的一个逗号语法解压缩它:
my_variable, = my_function()
答案 1 :(得分:5)
它不会忽略返回的值,您不会将它们分配给变量。
my_array, my_variable = my_function()
答案 2 :(得分:1)
简单回答
my_array, my_variable = my_function()
答案 3 :(得分: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)