2016-12-15 74 views
0
def pretty(e, level=0): 
    if len(e) > 0: 
     e.text = '\n' + '\t' * (level + 1) 
     for child in e: 
      pretty(child, level + 1) 
     child.tail = child.tail[:-1] 
    e.tail = '\n' + '\t' * level 

这段Python函数使用在其5日线递归调用。它在函数中有一个for循环,其中一个循环变量叫做child。但在第6行中,它也有一个child变量。请帮我理解child的定义。如何理解这个函数的递归调用

+1

是否有任何缺失的代码?第六行中的'孩子'变量超出了范围。 –

+2

'''''''''''''''''''''''''''''''''' - 是for循环的最后一个孩子。在'1234'中试试''':pass''' - 循环结束什么是'thing'? – wwii

+1

感谢@wwii,我认为他的回答很精确。这是Python中一个有趣的功能。 –

回答

1

变量'child'是由'for'声明的内联变量。

看一看该C#例如:

 foreach (PuzzlePiece **piece** in myPuzzle.pieces) 
    { 
     piece.DoSomething(); 
     Console.WriteLine(piece.WhatNumberPieceAmI()); 
    } 

在foreach被创建将在Foreach范围内存在的范围的变量{}。

您正在寻找Python代码中的等价物。

祝你好运!

+2

为什么'C#'范围规则适用于Python? –

+0

我知道第5行中的变量'child',它是for循环中的作用域变量。但是在第6行中,这个'孩子'明显地不在for循环中,所以我不明白它的定义在哪里 –

+0

@ Y.Eric--不是。'child'的范围明确地不是'为'循环。 Python中没有'for'循环范围。 'child'的范围是'pretty'功能的主体。我们中的一些人一直试图告诉你这一点。第6行中的“child”和第5行中的“child”在不同范围内的答案和评论都是错误的。这是一个常见的误解,因为有许多语言对'for'循环的主体进行了扩展。只是不是Python。 –