在for循环内部调用自身(函数),并更改局部变量

时间:2019-05-08 13:02:31

标签: python python-3.x

def findPair(students, Robert):
    #...
        if len(students) == 2:
            #do something
            return
        else:
            for friend in friendsOfRobert:
                print(students)
                leftStudents = removePairFromStudents(students, friend, Robert)
                if len(leftStudents) != 0:
                    findPair(leftStudents, leftStudents[0])
            return

我不太了解为什么students会在for中循环时被修改。它甚至不是全局变量。以下只是为了帮助您查看代码的结构。

  1. ...部分:从friendsOfRobert中找到students
  2. for循环

    (1)假设一个friendRobert已配对。

    (2)leftStudent:从friend删除Robertstudents

    (3)重复findPair,但是这次没有friendRobert。随机选择Robert的下一个等价字符(leftStudents[0]

在旁注中,我通过记住先前删除的一对来解决此问题,并在每次跳入下一个循环之前每次都重建原始students集(带有下面的代码)。

if len(students) == 2:
    if len(justPaired) != 0:
        students.append(justPaired[0])
        students.append(justPaired[1])
    # do something
    return

编辑:删除了不必要的示例

1 个答案:

答案 0 :(得分:3)

函数获得其参数的副本。他们获得对参数的引用的副本。所以,当你写

 f(x):
     x.append(3)
     x = [2,4,5]


 y = [1, 2]
 f(y)

x.append(3)行会影响所传递的实际列表,而第x = [2, 4, 6]行则无效,因为它会将引用的副本重新分配给参数。