如何在python中处理递归?

2024-04-19 19:24:05 发布

您现在位置:Python中文网/ 问答频道 /正文

在网上的例子上画了一个小函数,但是递归有问题。。。你知道吗

def toSimpleXml(data, wrap = False):
    result = list()
    input_data_type = type(data)
    if input_data_type is list:
        for sub_element in data:
            result.append(toSimpleXml(sub_element))
        return ''.join(result)
    elif input_data_type is dict:
        for tag_name in data:
            sub_element = data[tag_name]
            result.append('<%s>' % tag_name)
            result.append(toSimpleXml(sub_element))
            result.append('</%s>' % tag_name)
        return ''.join(result)

    if wrap:
        return '<%s>%s</%s>' % (wrap, data, wrap)

    return data

data = [{'element_1': 'value_1'}, {'element_2': {'element_2_1': 'value_2_1'}}, {'element_1': 'value_1'}]
print toSimpleXml(data, 'root')

根据想法,结果应该用root包装,但是wrap变量是false。。。你知道吗


Tags: nameinputdatareturnifisvaluetag
1条回答
网友
1楼 · 发布于 2024-04-19 19:24:05

函数返回太早wrap无法发挥作用。设置data而不是返回:

def toSimpleXml(data, wrap = False):
    result = list()
    input_data_type = type(data)
    if input_data_type is list:
        for sub_element in data:
            result.append(toSimpleXml(sub_element))
        data = ''.join(result)
    elif input_data_type is dict:
        for tag_name in data:
            sub_element = data[tag_name]
            result.append('<%s>' % tag_name)
            result.append(toSimpleXml(sub_element))
            result.append('</%s>' % tag_name)
        data = ''.join(result)

    if wrap:
        return '<%s>%s</%s>' % (wrap, data, wrap)

    return data

现在实际到达了if wrap语句:

>>> print toSimpleXml(data, 'root')
<root><element_1>value_1</element_1><element_2><element_2_1>value_2_1</element_2_1></element_2><element_1>value_1</element_1></root>

相关问题 更多 >