Python 中 append 与 + 在函数默认参数里的行为差异:append 为何修改原有列表而 + 创建新列表

2025-01-09 02:42:20   小编

Python 中 append 与 + 在函数默认参数里的行为差异:append 为何修改原有列表而 + 创建新列表

在 Python 编程中,函数默认参数是一个极为实用的特性,但其中 append 与 + 操作在默认参数里的行为差异,却常常让开发者感到困惑。理解这种差异,对写出高效、准确的代码至关重要。

先来看 append 的情况。当我们在函数默认参数中使用 append 时,它会直接修改原有列表。比如下面这个简单的示例:

def add_item(item, lst=[]):
    lst.append(item)
    return lst
print(add_item(1))
print(add_item(2))

在这个代码里,我们定义了一个 add_item 函数,默认参数 lst 是一个空列表。第一次调用函数时,它将 1 添加到这个空列表中,返回 [1]。第二次调用时,并没有创建一个新的空列表,而是在原来的 [1] 基础上添加 2,所以返回 [1, 2]。这是因为在 Python 中,函数的默认参数在函数定义时就被初始化,且只会初始化一次。后续调用函数时,如果没有传入新的 lst,就会一直使用最初初始化的那个列表对象,append 操作自然是在这个原有对象上进行修改。

再看看 + 操作。以如下代码为例:

def combine_list(item, lst=[]):
    new_lst = lst + [item]
    return new_lst
print(combine_list(1))
print(combine_list(2))

这里定义的 combine_list 函数,使用 + 操作将 item 与 lst 合并成一个新列表并返回。每次调用函数时,都会创建一个新的列表对象。第一次调用返回 [1],第二次调用返回 [2],而不是在 [1] 的基础上添加 2。这是因为 + 操作会创建一个新的列表,它并不会修改原有的 lst。每次调用函数时,即使默认参数 lst 是同一个对象,但 + 操作产生的是全新的列表实例。

在函数默认参数场景下,append 会修改原有列表对象,而 + 操作会创建新的列表。开发者在使用时一定要清晰这一差异,根据实际需求选择合适的操作,避免因不理解导致程序出现意外的行为。

TAGS: Python函数默认参数 append与+差异 append修改列表 +创建新列表

欢迎使用万千站长工具!

Welcome to www.zzTool.com