2016-12-15 69 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。 –