ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python:替换全局变量

2019-10-30 03:55:57  阅读:257  来源: 互联网

标签:global-variables binary-tree 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有