首页 > 解决方案 > 为什么将默认参数设置为空列表后,函数中的变量仍保留该值?

问题描述

def incr(s,a=[]):
    for x in s:
        a.append(x)
    return a

print(incr('asmuel'))
print(incr('rainfi'))

输出:
['a', 's', 'm', 'u', 'e', 'l']
['a', 's', 'm', 'u', 'e', 'l', 'r', 'a', 'i', 'n', 'f', 'i']

为什么即使将默认参数设置为空列表后,此函数仍保留该值?每次调用函数时如何使用默认参数值即[]?

标签: pythonpython-3.xvariablesrecursion

解决方案


您应该避免使用传递可变参数来运行。a不是[]每次调用函数时都初始化为一次。在下一个函数调用中重复使用相同的数组。因此数组只是不断扩展

这样做的正确方法是

def incr(s,a=None):
    if a is None:
        a=[]
    for x in s:
        a.append(x)
    return a

这不仅适用于列表,也适用于任何可变数据结构。


推荐阅读