【问题标题】: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 生成的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-19
          • 1970-01-01
          • 2017-03-10
          • 2010-09-06
          • 1970-01-01
          • 2011-12-08
          • 2023-01-27
          • 2011-09-15
          相关资源
          最近更新 更多