Python输出顺序错误

1 投票
1 回答
1268 浏览
提问于 2025-04-16 00:12

我需要一些非常简单的XML输出,所以我决定自己写一些函数。这只是第一步,但出现了很大的问题。我本来希望输出看起来是这样的:

<A>
    <D>
        <I></I>
        <J></J>
        <K></K>
    </D>
    <E>
        <I></I>
        <J></J>
        <K></K>
    </E>

……等等。

结果输出却是这样的:

  <I></I>
  <J></J>
  <K></K>
 <D>
 </D>
 <E>
 </E>
 <F>
 </F>
 <G>
 </G>
 <H>
 </H>
<A>
</A>
<B>
</B>
<C>
</C>

我相信我的错误一定是个很简单的事情,但我就是看不出来。这是我使用的整个文件:

def XMLChild(list, depth):
    for arg in list:
        print '\t' * depth + '<' + arg + '></' + arg + '>'

def XMLParent(list, depth, child):
    for arg in list:
        print '\t' * depth + '<' + arg + '>'
        child
        print '\t' * depth + '</' + arg + '>'

list1 = ['A', 'B', 'C']
list2 = ['D', 'E', 'F', 'G', 'H']
list3 = ['I', 'J', 'K', ]

XMLParent(list1, 0, XMLParent(list2, 1, XMLChild(list3, 2)))

如你所见,这两个函数应该都是用来打印标签的。XMLParent应该可以传递一个子函数,可以是另一个父函数或者一个子函数。不管我怎么看,我就是搞不懂为什么输出会是这个样子。

1 个回答

2

你现在不是在返回结果,而是直接打印出来了。所以输出的内容会按照函数执行的顺序来显示。你的代码其实可以看作下面这样,这样就能更清楚地看到函数是怎么被调用的:

a = XMLChild(list3, 2)
b = XMLParent(list2, 1, a)
XMLParent(list1, 0, b)

试着在每个函数里面构建一个字符串,然后把它返回给调用者。调用者可以把这个字符串加到自己的字符串缓冲区里,然后再返回。这样你就可以像下面这样输出合并后的字符串,并且把所有的打印操作放在一个地方:

a = XMLChild(list3, 2)
b = XMLParent(list2, 1, a)
print XMLParent(list1, 0, b)

撰写回答