【发布时间】:2019-05-28 03:43:50
【问题描述】:
以下代码来自Geeks for Geeks,用于计算二叉树中的最大路径和。
在函数findMaxSum() 中,他们将变量声明为findMaxUtil.res 这是什么意思?
我看到this question on SOF 如果function.variable 在函数内部,则表示该函数是一种对象。但在此示例中,函数名称和变量超出了原始函数。有人会用一个清晰的例子来解释一下吗!
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def findMaxUtil(root):
if root is None:
return 0
l = findMaxUtil(root.left)
r = findMaxUtil(root.right)
max_single = max(max(l, r) + root.data, root.data)
max_top = max(max_single, l+r+ root.data)
findMaxUtil.res = max(findMaxUtil.res, max_top)
return max_single
def findMaxSum(root):
findMaxUtil.res = float("-inf") ## This line
findMaxUtil(root)
return findMaxUtil.res ## and this line
【问题讨论】:
-
这是一个糟糕的方法——他们基本上只是使用一个全局变量。他们可以在没有任何全局状态的情况下轻松编写此代码。
-
OTOH,使用附加到函数的全局变量比使用污染模块范围的全局变量更好。所以这是一种不好的方法,但它比采用这种坏方法的更明显的方法要好。
-
...顺便说一句,我认为如果他们将其称为
global_max而不是res,读者可能会更清楚。
标签: python python-3.x