如何通过递归调用来理解这个函数

时间:2016-12-15 03:09:29

标签: python recursion

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的定义位置。

2 个答案:

答案 0 :(得分:2)

循环结束后,可迭代e的最后一个元素已分配给child。由于最小的封闭范围是函数体(for loops do not create their own scopes in Python),child仍然在第6行的范围内。

答案 1 :(得分:1)

变量'孩子'是由' for'。

内联声明的变量

看看这个c#示例:

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

Foreach正在创建一个范围变量,该变量将存在于Foreach范围{}。

您正在查看Python代码中的等价内容。

祝你好运!