Python-局部变量可将内容反复称为函数



我有以下示例:

def some_function(input1, some_list=[]):
    if some_list==[]:
        some_list.append(input1)
    if input1 % 3 != 0:
        some_list.append('last_one')
    else:
        some_list.append(input1/3)
        some_list = some_function(input1/3, some_list)
    return some_list
def main():
    #first call
    print(some_function(9))
    #second call
    print(some_function(99))
    return
if __name__ == '__main__':
    main() 

输出为:

[9, 3.0, 1.0, 'last_one']
[9, 3.0, 1.0, 'last_one', 33.0, 11.0, 'last_one']

我不明白为什么函数中的局部变量" some_list"仍然具有第一个调用的内容,当它被称为第二次时。我认为应该启动并在第二个呼叫发生时为空。

这是一个常见的问题,当您有可变的默认参数。

通常的解决方案是默认为 none 并在需要时实例化新列表:

def some_function(input1, some_list=None):
    if some_list is None:
        some_list = []
    ...

最新更新