Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:替换全局变量_Python_Global Variables_Binary Tree - Fatal编程技术网

Python:替换全局变量

Python:替换全局变量,python,global-variables,binary-tree,Python,Global Variables,Binary Tree,我试图生成一个Ω的西格玛代数。 我正在寻找如何替换全局变量。 这里Ω=[1,2,3] global sigma sigma=[[]] def buildDTree(sofar, todo): global sigma sal=[] if len(todo)==0: return binaryTree(sofar) else: withelt=buildDTree(sofar + [todo[0]],todo[1:])

我试图生成一个Ω的西格玛代数。 我正在寻找如何替换全局变量。 这里Ω=[1,2,3]

global sigma
sigma=[[]]
def buildDTree(sofar, todo):
    global sigma
    sal=[]
    if len(todo)==0:
        return binaryTree(sofar)
    else:
        withelt=buildDTree(sofar + [todo[0]],todo[1:])
        withoutelt=buildDTree(sofar, todo[1:])
        here=binaryTree(sofar)
        here.setLeftBranch(withelt)
        here.setRightBranch(withoutelt)
        sal+=(here.getLeftBranch().getValue())
        sigma+=[sal]
        return here
buildDTree([], [1,2,3])
print sigma

最简单的方法是将关键字参数添加到递归函数中,并返回结果sigma:

def buildDTree(sofar, todo, sigma=None):
    if sigma is None:
        sigma = [[]]
    sal = []
    if not todo:
        return sigma, binaryTree(sofar)
    else:
        _, withelt = buildDTree(sofar + [todo[0]], todo[1:], sigma)
        _, withoutelt = buildDTree(sofar, todo[1:], sigma)
        here = binaryTree(sofar)
        here.setLeftBranch(withelt)
        here.setRightBranch(withoutelt)
        sal += here.getLeftBranch().getValue()
        sigma += [sal]
        return sigma, here

sigma, _ = buildDTree([], [1,2,3])
这至少使
sigma
成为递归调用的“局部”

更好的方法是创建一个类:

class DTreeBuilder(object):
    def __init__(self):
        self.sigma = [[]]

    def buildDTree(self, sofar, todo):
        sal = []
        if len(todo) == 0:
            return binaryTree(sofar)
        else:
            withelt = buildDTree(sofar + [todo[0]], todo[1:])
            withoutelt = buildDTree(sofar, todo[1:])
            here = binaryTree(sofar)
            here.setLeftBranch(withelt)
            here.setRightBranch(withoutelt)
            sal += here.getLeftBranch().getValue()
            self.sigma += [sal]
            return here
然后像这样使用它:

builder = DTreeBuilder()
builder.build([], [1,2,3])
print builder.sigma

编写一个类并使用一个属性。