编程语言
首页 > 编程语言> > Python:替换全局变量

Python:替换全局变量

作者:互联网

我正在尝试生成Ω的sigma代数.
我正在寻找如何替换全局变量.
在这里,Ω= [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

标签:global-variables,binary-tree,python
来源: https://codeday.me/bug/20191030/1965177.html