首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python类别树/Leaf类保持变量状态

Python类别树/Leaf类保持变量状态
EN

Stack Overflow用户
提问于 2013-07-14 11:03:45
回答 1查看 398关注 0票数 0

对于Category/Leaf实现,我有以下类:

代码语言:javascript
复制
class CategoryMapper():
    @staticmethod
    def get_tree():
        categories = []
        tree_categories = Category.objects.filter(parent_id__isnull = True) 
        for tree_category in tree_categories:
            leaf_categories = CategoryMapper.get_leafs(tree_category)
            categories += leaf_categories

        return categories

    @staticmethod
    def get_leafs(tree_category, leaf_categories = [], depth = 0):
        if depth > 0:
            child_categories = Category.objects.filter(parent_id__exact = tree_category.id)
            if len(child_categories):
                depth += 1
                for sub_category in child_categories:
                    sub_category_name = ((depth - 1) * '-') + sub_category.category
                    leaf_categories.append([sub_category.id, sub_category_name])

                    return CategoryMapper.get_leafs(sub_category, leaf_categories, depth)
            else:
                return leaf_categories
        else:
            leaf_categories.append([tree_category.id, tree_category.category])
            depth += 1

            return CategoryMapper.get_leafs(tree_category, leaf_categories, depth)

我的日期如下: ID |类别|家长ID 1|测试1|无2|测试1子项|1 3|测试2|无

当我运行它(CategoryMapper.get_tree())时,我得到:

代码语言:javascript
复制
[[1, u'Test 1'], [2, u'-Test 1 Child'], [1, u'Test 1'], [2, u'-Test 1 Child'], [3, u'Test 2']]

当我再次运行它时,我得到:

代码语言:javascript
复制
[[1, u'Test 1'], [2, u'-Test 1 Child'], [3, u'Test 2'], [1, u'Test 1'], [2, u'-Test 1 Child'], [1, u'Test 1'], [2, u'-Test 1 Child'], [3, u'Test 2'], [1, u'Test 1'], [2, u'-Test 1 Child'], [3, u'Test 2']]

就像get_tree()中的categories变量一样,在遍历tree_categories时,每次运行for循环时,都会保留其状态。我做错了什么?为什么它会保持这样的状态?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-14 11:09:56

啊,你需要避免使用可变对象作为函数的默认参数,比如[]。相反,只需像这样定义get_leafs

代码语言:javascript
复制
def get_leafs(tree_category, leaf_categories = None, depth = 0):
    if leaf_categories is None:
        leaf_categories = []
    …
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17636160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档