备忘录和返回声明

2024-09-28 01:33:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python相当陌生,在youtube上偶然发现了一门动态编程课程,我认为这会帮助我更好地理解这个概念

现在,我一直在努力理解它。。。有没有人有时间解释一下这个代码的工作方式

该函数将目标和和和数字数组作为参数。 该函数应返回一个数组,该数组包含与目标数字相加的任意数字组合

def howSum(targetSum, numbers, memo = {}):

if targetSum in memo : return memo[targetSum]
if targetSum == 0 : return []
if targetSum < 0 : return None

for num in numbers:
    remainder = targetSum - num
    
    remainderResult = howSum(remainder, numbers, memo)
        
    if remainderResult != None:
        memo[targetSum] = [*remainderResult, num]
        return memo[targetSum]
    
memo[targetSum] = None
return None
    

最初的代码是为JS编写的,我将其翻译成Python,但我正在为以下几件事而挣扎:即:

  • 在定义末尾返回语句

  • 具体来说,这一行:

    备注[targetSum]=[*remainderResult,num]

有没有我遗漏的概念


Tags: 函数代码none概念目标returnif数字
2条回答

最好简而言之,您的代码应该评估哪些函数来节省其他人的时间

  1. return statements at the end of the definition:

请注意,如果您在执行代码时到达这一行,那么您没有找到答案,因此返回None,这意味着找不到答案

  1. memo[targetSum] = [*remainderResult, num]

您的函数试图找到一种方法,将targetSum写为数字元素子集的和,并将这些元素存储在memo[targetSum]中。这正是这行代码中发生的情况

我试图用评论来解释:

def howSum(targetSum, numbers, memo = {}):

    # if the result is calculated 
    # already (in the past) then 
    # use it
    if targetSum in memo : return memo[targetSum]

    # return pre-defined values 
    # to out-of-bound parameters
    if targetSum == 0 : return []
    if targetSum < 0 : return None

    # otherwise make the calculation
    for num in numbers:
        remainder = targetSum - num
        
        remainderResult = howSum(remainder, numbers, memo)
            
        if remainderResult != None:
            # if there is a result (which is not 
            # None) then store it for later
            # (to memoize it)
            memo[targetSum] = [*remainderResult, num]
            return memo[targetSum]
    
    memo[targetSum] = None
    return None

有关更具Python风格的备忘录,请参见this answer

相关问题 更多 >

    热门问题