为什么元组拆包可以提供正确的结果,而使用两行却不能?

Why can tuple-unpacking provide a correct result when using two lines doesn't?

我正在处理 "maximum product subarray" 问题,我 运行 遇到了我的代码

的问题

我解决这个问题的方法是

def maxProduct(nums):
   minProd = maxProd = maximum = nums[0]
   for i in range(1, len(nums)):
      currentNum = nums[i]
      maxProd = max(currentNum, currentNum*maxProd, currentNum*minProd)
      minProd = min(currentNum, currentNum*maxProd, currentNum*minProd)
      maximum = max(maximum, maxProd)
   return maximum

print(maxProduct([-4, -3, -2]))

我的答案是 72,但给出正确答案的代码是:

def maxProduct(nums):
    minProd = maxProd = maximum = nums[0]
    for i in range(1, len(nums)):
        currentNum = nums[i]
        maxProd, minProd = max(currentNum, currentNum*maxProd, currentNum * minProd), min(currentNum, currentNum*maxProd, currentNum*minProd)
        maximum = max(maximum, maxProd)
    return maximum


print(maxProduct([-4, -3, -2]))

我的解决方案和正确的解决方案似乎做同样的事情。为什么

maxProd, minProd = max(currentNum, currentNum*maxProd, currentNum * minProd), min(currentNum, currentNum*maxProd, currentNum*minProd)

maxProd = max(currentNum, currentNum*maxProd, currentNum*minProd)
minProd = min(currentNum, currentNum*maxProd, currentNum*minProd)

有这么大的不同?

计算第二个值时maxProd的值是多少?

在第一个例子中,

max(currentNum, currentNum*maxProd, currentNum * minProd), min(currentNum, currentNum*maxProd, currentNum*minProd)

计算后解包赋值

在第二个例子中,新的maxProd值被计算和赋值,然后用于第二次计算。