Python输出顺序错误
我需要一些非常简单的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)