插件窝 干货文章 Python列表操作:append方法和+号运算符在函数默认参数中有什么区别?

Python列表操作:append方法和+号运算符在函数默认参数中有什么区别?

item list 函数 列表 578    来源:    2025-03-15

在Python中,append方法和+运算符在处理列表时有一些关键的区别,尤其是在函数默认参数中。让我们通过一个例子来详细说明这些区别。

1. 使用 append 方法

def add_item(item, my_list=[]):
    my_list.append(item)
    return my_list

print(add_item(1))  # 输出: [1]
print(add_item(2))  # 输出: [1, 2]
print(add_item(3))  # 输出: [1, 2, 3]

在这个例子中,my_list 是一个默认参数,它的默认值是一个空列表 []。由于默认参数在函数定义时只被计算一次,因此每次调用 add_item 函数时,my_list 都会引用同一个列表对象。append 方法会直接修改这个列表对象,因此多次调用 add_item 函数时,my_list 会累积之前添加的所有元素。

2. 使用 + 运算符

def add_item(item, my_list=[]):
    my_list = my_list + [item]
    return my_list

print(add_item(1))  # 输出: [1]
print(add_item(2))  # 输出: [2]
print(add_item(3))  # 输出: [3]

在这个例子中,my_list = my_list + [item] 创建了一个新的列表对象,并将其赋值给 my_list。由于 + 运算符不会修改原始的 my_list,而是返回一个新的列表对象,因此每次调用 add_item 函数时,my_list 都会引用一个新的列表对象。因此,多次调用 add_item 函数时,my_list 不会累积之前添加的元素。

3. 使用 None 作为默认参数

为了避免默认参数在多次调用中共享同一个对象的问题,通常建议使用 None 作为默认参数,并在函数内部初始化列表:

def add_item(item, my_list=None):
    if my_list is None:
        my_list = []
    my_list.append(item)
    return my_list

print(add_item(1))  # 输出: [1]
print(add_item(2))  # 输出: [2]
print(add_item(3))  # 输出: [3]

在这个例子中,每次调用 add_item 函数时,如果 my_listNone,则会创建一个新的空列表。这样,my_list 不会在多次调用中共享同一个对象,避免了意外的行为。

总结

  • append 方法会直接修改原始的列表对象,因此在函数默认参数中使用时,可能会导致多次调用共享同一个列表对象。
  • + 运算符会创建一个新的列表对象,因此在函数默认参数中使用时,每次调用都会创建一个新的列表对象。
  • 为了避免默认参数在多次调用中共享同一个对象的问题,通常建议使用 None 作为默认参数,并在函数内部初始化列表。