在不使用全局变量的情况下保持本地列表更新

时间:2019-12-03 12:02:42

标签: python

这可能是一个非常愚蠢的问题,但是在这种情况下是否可以使本地空列表保持更新:

def voeg_vriendschap_toe(sn, naam_persoon1, naam_persoon2):
    relaties = []
    count_variabel = 0
    aanwezig_persoon1 = False
    aanwezig_persoon2 = False
    uitvoeren = True
    for i in relaties:
        if((i[0] == naam_persoon1) and (i[1] == naam_persoon2)):
            uitvoeren = False
    while ((len(sn) > count_variabel) and ((aanwezig_persoon1 == False) or (aanwezig_persoon2 == False)) and (uitvoeren == True)):
        if (sn[count_variabel] == naam_persoon1):
            aanwezig_persoon1 = True
        if (sn[count_variabel] == naam_persoon2):
            aanwezig_persoon2 = True
        count_variabel += 1
    if ((aanwezig_persoon1 == True) and (aanwezig_persoon2 == True)):
        sn.append([naam_persoon1, naam_persoon2])
        sn.append([naam_persoon2, naam_persoon1])
        relaties.append([naam_persoon1, naam_persoon2])
        relaties.append([naam_persoon2, naam_persoon1])
        return sn
    else:
        return sn

我希望在附加函数之后更新关系,而在多次调用该函数时不要再次成为空列表。

因此,如果一次调用voeg_vriendschap_toe(),并且关系更新为[[1,2 ,, [2,1]]。但是,如果再次调用它,它将再次成为一个空列表,而不是保留其值。不用使用全局变量就可以保持其值吗?

1 个答案:

答案 0 :(得分:0)

如果您不想使用类,则获取所需内容的一种方法是使用可变的默认参数:

def voeg_vriendschap_toe(sn, naam_persoon1, naam_persoon2, relaties = []):
    count_variabel = 0
    ...

这样,relaties只会在函数定义中被评估为[]一次。

您可以查看Default Parameter Values in PythonLeast Astonishment” and the Mutable Default Argument了解更多详细信息。

请注意,不过,根据您的使用情况,使用类可能会更好。