python函数定义中不要使用可变类型作为默认参数

在Python中当函数被定义时,默认参数只会运算⼀次,⽽不是每次被调⽤时都会重新运算。应该永远不要定义可变类型的默认参数
列表和字典都属于可变类型,当作为默认参数时,因为默认参数只会运行一次,所以会在上一次调用的基础上进行处理
如:

#列表作为默认参数
def add_to(num, target=[]):
    target.append(num)
    return target
print(add_to(1))
print(add_to(2))
print(add_to(3))
#输出:
[1]
[1, 2]
[1, 2, 3]

#字典作为默认参数
def add_to(num, target={}):
    target.setdefault(num,'a')
    return target
print(add_to(1))
print(add_to(2))
print(add_to(3))
#打印
{1: 'a'}
{1: 'a', 2: 'a'}
{1: 'a', 2: 'a', 3: 'a'}`

当使用不可变类型作为默认参数时,则没有变化

def add_to(num, target=''):
    target=target+str(num)
    return target
print(add_to(1))
print(add_to(2))
print(add_to(3))
#打印
1
2
3

可以这样使用:

def add_to(element, target=None):
    if target is None:
        target = []
    target.append(element) 
    return target
print(add_to(1))
print(add_to(2))
print(add_to(3))
#打印
[1]
[2]
[3]

你可能感兴趣的:(python)