代码之家  ›  专栏  ›  技术社区  ›  xnine

python输出不正常

  •  1
  • xnine  · 技术社区  · 16 年前

    我需要一些非常简单的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 回复  |  直到 16 年前
        1
  •  2
  •   Emil H    16 年前

    您不会返回结果,而是直接打印。因此,它将按函数执行的顺序输出。您的代码相当于以下代码,它澄清了函数的调用顺序:

    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)