我试图生成Ω的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])

这至少使递归调用成为“本地”。
一个更好的方法是创建一个类:
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

关于python - Python:替换全局变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20550148/

10-08 22:09