【问题标题】:function returning None (functional programming)函数返回无(函数式编程)
【发布时间】:2022-12-07 13:49:29
【问题描述】:
我正在尝试制作一个功能函数,我希望它返回一个数组(ndarray)。我不知道为什么,但我的代码没有返回。
这是我的代码:
def upgrade_array(array:np.ndarray, max_value:int, value:int=1):
a = array.copy()
index = value-1
a[index,:] = value
#display(a)
if value==max_value:
return np.array(a)
else:
upgrade_array(array=a, max_value=max_value, value=value+1)
a = np.zeros(shape=(10,5))
b = upgrade_array(array=a, max_value=10)
display(b)
我知道背后的逻辑没问题,因为我验证了它(使用 display(a))。
我怎样才能让它返回一个 ndarray?
【问题讨论】:
标签:
python
arrays
numpy
function
functional-programming
【解决方案1】:
您的代码没有返回数组,因为您没有在对 upgrade_array() 的递归调用中指定返回值。相反,您再次调用该函数而没有指定它应该返回什么值。
要解决此问题,您可以在对 upgrade_array() 的递归调用中添加 return 语句。这将确保函数返回递归调用的结果。
以下是如何修改代码以执行此操作的示例:
def upgrade_array(array:np.ndarray, max_value:int, value:int=1):
a = array.copy()
index = value-1
a[index,:] = value
#display(a)
if value==max_value:
return np.array(a)
else:
# Return the result of the recursive call to upgrade_array()
return upgrade_array(array=a, max_value=max_value, value=value+1)
通过此更改,递归调用 upgrade_array() 的结果将从函数返回,并且 a 数组将按预期返回。
我希望这有帮助!如果您有任何其他问题,请告诉我。
【解决方案2】:
在您的 else: 案例中,该函数不返回值。当然,递归调用可能,但原始调用不会。你需要像这样return调用链上的值
def upgrade_array(array:np.ndarray, max_value:int, value:int=1):
a = array.copy()
index = value-1
a[index,:] = value
#display(a)
if value==max_value:
return np.array(a)
else:
# notice the change here:
return upgrade_array(array=a, max_value=max_value, value=value+1)
a = np.zeros(shape=(10,5))
b = upgrade_array(array=a, max_value=10)
display(b)
【解决方案3】:
要使您的函数返回一个 ndarray,您需要在递归调用 upgrade_array 函数的代码的 else 块中添加一个 return 语句。您的代码应如下所示:
def upgrade_array(array:np.ndarray, max_value:int, value:int=1):
a = array.copy()
index = value-1
a[index,:] = value
#display(a)
if value==max_value:
return np.array(a)
else:
return upgrade_array(array=a, max_value=max_value, value=value+1)
a = np.zeros(shape=(10,5))
b = upgrade_array(array=a, max_value=10)
display(b)
在您的代码中,upgrade_array 函数在 else 块中被递归调用,但那里没有 return 语句,因此没有使用递归调用的返回值,函数最终返回 None。通过添加 return 语句,您可以确保使用递归调用的返回值并且函数返回预期结果。
这是由 chatGPT 生成的。